Access 2003 / SQL仅匹配左表中非空的列

时间:2015-06-24 21:30:57

标签: sql ms-access join

我想在右表中执行左连接匹配行,这些行具有与左侧相同的值。我希望连接忽略左表中的空值而不是尝试匹配它们。

如果左表列A为空(null),则右表中的任何值都可以接受。如果左表的列B和C包含值,我想在右表中匹配它们。

+--------+--------+-------+     +--------+-------+------+
|    A   |   B    |   C   |     |   A    |   B   |   C  |
+--------+--------+-------+     +--------+-------+------+
|  Null  |   1    |   2   |     |   3    |   1   |   2  |
+--------+--------+-------+     +--------+-------+------+
                                |   5    |   1   |   2  |
                                +--------+-------+------+
                                |   7    |   1   |   2  |
                                +--------+-------+------+

上面右表中的每一行都应该加入。

左表中的任何列都可以具有值或为null。如何查询仅匹配已填充列的查询?

我尝试在ON子句中使用AND并且没有任何连接,当我使用OR时,如果只有一列匹配则行连接。

感谢。

1 个答案:

答案 0 :(得分:0)

对于每一列,如果值相等或左值为null,则需要条件来连接值:

SELECT    t1.*, t2.*
FROM      t1
LEFT JOIN t2 ON (t1.a IS NULL OR t1.a = t2.a) AND
                (t1.b IS NULL OR t1.b = t2.b) AND
                (t1.c IS NULL OR t1.c = t2.c)