我有3张桌子:a
,aLocale
,aCompany
。
如果a.id = aLocale.parentID
不存在,我需要获取aCompany.parentID
的所有行。
我知道aLocale
将是innerJoin
,但aCompany
呢?
我也可以看错了。我使用aCompany的唯一原因是匹配行不存在。目前,我正在运行a
的查询并将结果作为数组获取。然后我遍历数组并取消设置与aCompany
的单独查询匹配的项目。我觉得用1个查询可以有更好的方法。
答案 0 :(得分:1)
您可以使用LEFT JOIN而不是INNER JOIN,这将返回甚至不匹配的值
SELECT * FROM a INNER JOIN aLocale ON a.id = alocale.parentID
LEFT JOIN aCompany ON aCompany.parentID = alocale.parentID
WHERE aCompany.parentID IS NULL
编辑: 您还可以在select
中使用coalesce()而不是*来获取parentID not nullSELECT COALESCE(aCompany.parentID, aLocale.parentID) AS parentID FROM ....
使用coalesce(),你会在参数列表
中找到第一个非空值