我在 PostgreSQL 中的 SQL 查询遇到问题

I am having trouble with my SQL query in PostgreSQL

我想做的是从 parts 获取所有记录,从 oelineitem 获取所有记录,其中 parts.id 等于 owlineitems.part_id 我还需要几个字段来自 table oe.

我保证 oelineitems 中的每一行都在 oe 中有一行(多对一关系)但我不能保证 oelineitem 中的每一行都有一行parts。即使 oelineitem 中没有行,我也需要 parts 中的行在数据集中。

我的查询:

SELECT parts.partnumber, 
       parts.description, 
       parts.bin, 
       parts.obsolete, 
       orderitems.qty, 
       oe.transdate 
FROM   parts 
LEFT JOIN orderitems 
       ON parts.id = orderitems.parts_id
LEFT JOIN oe 
       ON orderitems.trans_id = oe.id 
WHERE  oe.customer_id <> 12228
ORDER  BY part.partnumber; 

将条件从 WHERE 移动到 ON:

SELECT parts.partnumber, 
       parts.description, 
       parts.bin, 
       parts.obsolete, 
       orderitems.qty, 
       oe.transdate 
FROM   parts 
LEFT JOIN orderitems 
       ON parts.id = orderitems.parts_id
LEFT JOIN oe 
       ON orderitems.trans_id = oe.id 
       AND oe.customer_id <> 12228
ORDER  BY part.partnumber;

您正在外联记录。因此,如果没有匹配项,您将加入所有列为 NULL 的虚拟记录。如果您询问 WHERE oe.customer_id <> 12228,您将关闭这些记录,因此您将删除所有外部连接的记录,并且您将到达仅内部连接的位置。

(因为 NULL <> 12228 结果为 null,而不是 true。)