У меня есть 2 таблицы первая таблица. сотрудник (empid-primary key, empname) например: таблица сотрудников
1 john
2 martyn
3 davis
документы второй таблицы (empid, documentname) например:
1 address.doc
1 worksheet.doc
1 salaryslip.doc
3 address.doc
у каждого сотрудника есть только одна запись в таблице сотрудников но в таблице документов для каждого сотрудника вставлены ноль или более записей.
Я хочу написать запрос, который дает результат, показанный ниже
empid empname documentflag
1 john true
2 martyn null
3 davis true
то есть, если в таблице документов есть хотя бы одна запись для сотрудника, тогда установить соответствующий флаг документа будет true. в противном случае установить значение документа как null. есть ли эффективный способ использования объединений. Спасибо заранее
Вы можете сделать это с помощью LEFT JOIN
, чтобы включить таблицу документов, GROUP BY
, чтобы вы получали только 1 сотрудника за строку и конструкцию IF()
для вывода значений, которые вы хотите для documentflag.
SELECT e.empid, e.empname, IF(d.empid IS NULL, NULL, TRUE) `documentflag`
FROM employee e
LEFT JOIN documents d ON (d.empid = e.empid)
GROUP BY e.empid
SELECT
empid,
empname,
documentFlag
FROM employee emp
LEFT OUTER JOIN
(SELECT doc.empid, count(doc.empid)as documentFlag
FROM documents doc Group by empid) X
ON emp.empid = X.empid