SQL连接Null值

时间:2015-06-03 01:47:37

标签: sql-server join

嗨我有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。

4 个答案:

答案 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

demo here

答案 3 :(得分:-1)

select A.a1,A.a2,B.b2 from A left join B on A.a1 = B.b1;