【问题标题】:Access 2003/SQL matching only columns that are not null in the left tableAccess 2003/SQL 仅匹配左表中不为空的列
【发布时间】:2015-09-11 07:09:02
【问题描述】:

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

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

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

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

左表中的任何列都可以有值或为空。如何对仅匹配已填充列的查询进行措辞?

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

谢谢。

【问题讨论】:

    标签: sql ms-access join


    【解决方案1】:

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

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-16
      • 2016-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多