Левое соединение, чтобы показать нулевые строки + где
У меня есть две таблицы, одна из которых содержит уникальные имена (bill_datatypes), а другая выражает, что эти имена связаны с некоторыми подкатегориями (одно имя может быть связано с несколькими категориями).
Первая таблица (соответствующая часть):
Вторая таблица (соответствующая часть):
Я хотел бы выделить все имена, которые еще не связаны с конкретной подкатегорией. Это означает, что имена может быть упомянут в соединительной таблице, но связан с другой подкатегорией.
Я решил задачу следующим подзапросом:
SELECT T1.name
FROM bill_datatype T1
WHERE NOT EXISTS (
SELECT T2.bill_datatype_id
FROM obligatory_field T2
WHERE T2.bill_datatype_id = T1.id AND T2.bill_sub_category_id = 1
)
Это решение, кажется, работает хорошо, но таким образом я не могу иметь никаких данных из второй таблицы, которые могли бы понадобиться в будущем.
Есть ли у вас какие-либо предложения о том, как решить проблему с левым соединением? (Пункт WHERE в подкатегории сделал его слишком сложным для меня.)
Спасибо за вашу помощь также в вперед!
2 ответа:
Из того, как я понимаю ваш вопрос, я думаю, что этот запрос достигнет того, что вы хотите:
SELECT T1.name FROM bill_datatype T1 LEFT JOIN obligatory_field T2 ON T2.bill_datatype_id = T1.id AND T2.bill_sub_category_id = 1 WHERE T2.bill_datatype_id IS NULL
Условие
WHERE
в таблицеJOIN'ed
даст вам только имена изT1
, которые не имеютbill_sub_category_id
или ихbill_sub_category_id
не 1.