连接以基于IN语句拉出匹配项和不匹配项

时间:2018-07-30 23:50:09

标签: sql

我在连接两个要基于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匹配项被排除在回报之外。

2 个答案:

答案 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,您将始终看到结果。