当一个表可能为空时如何连接2个表

时间:2014-04-08 16:16:12

标签: sql-server

我在SQL Server 2008中工作。我有2个非常简单的表。让我们调用第一个Table_A,它有Col_1和Col_2列,让我们调用第二个Table_B,它有Col_a和Col_b列。 Col_1和Col_a是两个表之间的关键。所以,让我们说我想做一个简单的连接,比如

  SELECT
    Table_A.Col_1,
    Table_A.Col_2,
    Table_B.Col_b
    FROM Table_A
    LEFT JOIN Table_B
    ON Table_A.Col_1 = Table_B.Col_a
    WHERE Table_A.Col_2 <> Table_B.Col_b

我遇到的问题是Table_B可能为空,这意味着此查询不会返回任何记录。在那种情况下,我希望查询只返回Table_A中的所有记录。解决这个问题的最佳方法是什么?

以下是一些示例数据: -

Table_A:-

Col_1 Col_2
-----------
x     1
y     3

Table_B:-

Col_a Col_b
-----------
x     1   
y     4

1 个答案:

答案 0 :(得分:0)

如果我此时正确解释了问题/注释,您需要一个WHERE子句,它将结果过滤到Table_B.Col_b为NULL或与Table_A.Col_1不匹配的记录。相当于WHERE Table_A.Col_1&lt;&gt; Table_B.Col_b或Table_B.Col_b IS NULL。

 SELECT Col_1,
        Col_2,
        Col_b
   FROM Table_A
        LEFT JOIN 
        Table_B ON Col_1 = Col_a
  WHERE Col_1 <> ISNULL(Col_b,-Col_1) --I use -Col_1 since i don't know a literal values that will always be different.