我有两个表,一个表包含唯一的名称(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
)
此解决方案似乎效果很好,但是通过这种方式,我无法从第二张表中获得任何数据,将来可能会需要。
您对使用LEFT JOIN解决问题有任何建议吗? (子类别的WHERE子句对我来说太具有挑战性了。)
也提前感谢您的帮助!
答案 0 :(得分:1)
根据我对您问题的理解,我认为该查询将实现您想要的目标:
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的名称。 / p>
答案 1 :(得分:0)
SELECT distinct T1.name
FROM
bill_datatype T1
right join
(
SELECT T2.bill_datatype_id
FROM obligatory_field T2
WHERE T2.bill_sub_category_id = 1
)
as T3
on T1.id != T3.bill_datatype_id