嗨我有2张桌子A和B
表A有2列a1(int)和a2(varchar(5)) 表B有2列b1(int)和b2(varchar(5))
表A的值为
a1 a2
1 aaa
NULL bbb
2 ccc
3 ddd
表B的值为
b1 b2
1 app
2 new
3 disc
我希望得到结果
a1 a2 b2
1 aaa app
NULL bbb NULL
2 ccc new
3 ddd disc
注 -
记住我和b1一起加入a1但a1有NULL,我的结果也要Null。
答案 0 :(得分:2)
您可以使用名为LEFT JOIN
的内容来实现这些结果。我把它的功能解释为:
给我左边的表格中的行,如果右边的表格中的任何行符合我的条件,请加入它们。否则,请在其位置使用
NULL
值。
因此,如果您说SELECT * FROM A LEFT JOIN B ON ...
,则A
位于左侧,因此始终会被选中。只有满足B
条件时,才会使用右侧的ON
。如果不是,则会使用NULL
代替它的值,为您提供您想要的内容!
我只想指出,如果B
的{{1}}值为NULL
,事情可能会变得奇怪。因此,我会添加一个这样的支票:
b1
你可以在这里看到小提琴: http://sqlfiddle.com/#!9/5ca6d/5
编辑:那个null的东西似乎没有引起MySQL 5.6中的任何问题,因为SELECT a1, a2, b2
FROM A
LEFT JOIN B
ON a1 IS NOT NULL AND a1 = b1;
是假的(同样是NULL = NULL
),但我觉得很奇怪让它下落不明......
答案 1 :(得分:0)
left join
应该做你想做的事:
select a.a1, a.a2, b.b2
from a left join
b
on a.a1 = b.b1;
这是标准的SQL,因此它可以在任何数据库中使用。
答案 2 :(得分:0)
您只是在寻找left join
select tablea.*, tableb.b2 from
tablea left join tableb
on tablea.a1 = tableb.b1
答案 3 :(得分:-1)
select A.a1,A.a2,B.b2 from A left join B on A.a1 = B.b1;