gpt4 book ai didi

postgresql - SQL 离开 JOIN 与 where 子句不返回所有结果

转载 作者:行者123 更新时间:2023-11-29 14:09:08 24 4
gpt4 key购买 nike

我有 2 个使用 ID 加入的表。如果该 ID 在表 #2 中,我希望主表中的所有数据都显示并匹配,以便在我的输出中显示更多列。目前适用于

select table1.id, table1.name, table1.phone, table1.address, 
table2.loyalcustomer, table2.loyaltynumb, table2.loyaltysince from table1
left join table2
ON table1.id = table2.table1id

我正在尝试做的是同一件事,但将 WHERE 子句添加到 table2.loyalcustomer != 'Yes'。当我这样做时,它不会从我的主表 (table1) 返回所有数据,而是只显示 table1 和 table2 之间的匹配项。此外,table2 没有所有信息,只有插入到表中的信息。

select table1.id, table1.name, table1.phone, table1.address, 
table2.loyalcustomer, table2.loyaltynumb, table2.loyaltysince from table1
left join table2
ON table1.id = table2.table1id
WHERE table2.loyalcustomer != 'Yes'

一直在阅读不同的连接,但我一直在阅读的是我的 where 语句可能与我的连接相矛盾,我不确定如何解决这个问题。

SQL 数据库:Postgres

最佳答案

问题出在您的 WHERE 子句上。小心 LEFT JOINS !

当您在 TABLE 上执行 LEFT JOIN 时,该表不会像 INNER JOIN 一样过滤结果。这是因为您接受 LEFT JOIN TABLE 以返回整个 NULL 行。

但是,当您说... "table2.loyalcustomer != 'Yes'"时,您在 WHERE 子句中使用了来自“LEFT JOINED TABLE”的 COLUMN。此子句在 table2.loyalcustomer 不为空时有效,但在 table2.loyalcustomer 为 NULL 时无效。

所以这是正确的方法:

选择 table1.id, ...从表 1left join table2 ON table1.id = table2.table1id and table2.loyalcustomer != 'Yes'

这是另一种方法...

选择 table1.id, ...从表 1left join table2 ON table1.id = table2.table1idWHERE ISNULL(table2.loyalcustomer, '') != '是'

要恢复:NULL != 'Yes' 不起作用。您需要不同于 null 的值来评估您的表达式。

关于postgresql - SQL 离开 JOIN 与 where 子句不返回所有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50861513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com