繁体   English   中英

即使“ JOIN”表中没有数据,也要选择ID

[英]Select IDs even when there is no data in a 'JOIN'ed table

我想实现一些我认为很容易实现的目标,但是我无法解决这个问题。

我有两个表,A和B:

表A是定义所有项目的地方。

+----+--------------+
+ ID + other_things +
+----+--------------+
+ 1  + ~~~~~~~~~~~~ +
+ 2  + ~~~~~~~~~~~~ +
+ 3  + ~~~~~~~~~~~~ +
+----+--------------+

在表B中,存储了一些可选属性,但并非所有记录都在该表中。

+----+-------------+-------------+
+ ID + prop_type   +  prop_value +
+----+-------------+-------------+
+ 1  +    prop1    +   foo       +
+----+-------------+-------------+
+ 1  +    prop2    +   toto      +
+----+-------------+-------------+
+ 3  +    prop2    +  lorem      +
+----+-------------+-------------+  

当我查询这些表时,使用:

SELECT A.ID, B.prop_value FROM A FULL JOIN B ON A.ID = B.ID WHERE B.prop_type = 'prop2'

我懂了

ID                       prop_value
------------------------ -------------------------------------------------------
1                        toto
3                        lorem

但我想获得表A中的所有行,即使它们没有'prop2'值,例如

ID                       prop_value
------------------------ -------------------------------------------------------
1                        toto
2                   
3                        lorem

我如何调整查询以获取后者(我认为这与JOIN关键字有关,但是无论我阅读了多少教程,我都无法使其工作……)

非常感谢!

代替where ,使用and

SELECT A.ID, B.prop_value FROM A FULL JOIN B ON A.ID = B.ID and B.prop_type = 'prop2'

您只需要一个LEFT JOIN 关键是将WHERE条件放在ON子句中:

SELECT A.ID, B.prop_value
FROM A LEFT JOIN
     B
     ON A.ID = B.ID AND B.prop_type = 'prop2';

LEFT JOIN将所有行保留在第一个表中,即使第二个表中没有匹配的行也是如此。 但是,第二个表中的列的值为NULL ,因此WHERE子句将其过滤掉。

正如我在评论中指出的那样,MySQL不支持FULL OUTER JOIN 大多数数据库都可以,但是LEFT JOIN仍然是您要执行的操作的合适LEFT JOIN类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM