Предположим, у меня есть запрос, как это:Как включить записи, в которых отсутствует одна половина соединения?
SELECT
s.staffID as staffID,
CONCAT_WS(", ", lname, fname) AS name,
GROUP_CONCAT(unit SEPARATOR ", ") AS units
FROM
staff s,
units u,
staff_units r
WHERE
s.staffID = r.staffID
AND u.unitID = r.unitID
GROUP BY s.staffID
ORDER BY lname
Это получает список что-то вроде этого:
Alice Accounting
Bob Systems
Charlie Customer Services, Administration
Хорошо до сих пор. Теперь предположим, что я удаляю запись в staff_units
, которая записывает Алису в качестве члена бухгалтерского учета. Выполнение этого запроса будет давать список, из которого Алиса исключается, хотя она до сих пор существует в staff
таблице:
Bob Systems
Charlie Customer Services, Administration
Могу ли я настроить этот SQL, так что он продолжает возвращать Алису в результате, показывая ей, как Unassigned к единице?
Я мог бы, конечно, запустить один запрос, чтобы получить список сотрудников, а другой запрос для каждого из них получить текущие назначения. Но это будет означать запуск n + 1 запросов для создания списка, где n - количество сотрудников, и это просто портит меня неправильно.
Отлично, что сделал трюк. Благодарю. Я соглашусь через несколько минут, когда закончится кулдаун. –
@WillMartin - Спасибо, но серьезно относитесь к сведению. Когда вы научитесь использовать явный синтаксис соединения, вам будет намного легче читать и поддерживать. –
Спасибо, я потрачу немного времени на это. –