我在连接两个要基于IN子句返回匹配项和不匹配项的表时遇到了麻烦。
SELECT * FROM detail p
LEFT OUTER JOIN inventory e on p.style = e.style
WHERE det_id in ('123','456','789','101') and p.warehouse = e.warehouse
and p.partner = e.partner
我了解where子句可能会删除null值,但是删除该项时并没有得到预期的结果。
库存表有时会与明细表进行匹配,但是无论是否找到匹配项,我总是想返回给出det_id的任何详细记录。我发现我的null匹配项被排除在回报之外。
答案 0 :(得分:1)
大概,您想要这样的东西:
SELECT *
FROM detail p LEFT OUTER JOIN
inventory e
ON p.style = e.style AND p.warehouse = e.warehouse AND
p.partner = e.partner AND
WHERE d.det_id in (123, 456, 789, 101) ;
second 表上的任何条件都必须位于ON
子句中,LEFT JOIN
才能正常工作。第一个表上的 only 条件应位于WHERE
子句中。
答案 1 :(得分:1)
我将删除left outer join
并将其替换为left join
。
SELECT *
FROM detail p
LEFT JOIN inventory e
ON p.partner = e.partner
AND p.warehouse = e.warehouse
AND p.style = e.style
WHERE p.det_id in (123, 456, 789, 101)
如果det_id
表中存在detail
,您将始终看到结果。