我在 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。)
我想做的是从 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。)