我想在右表中执行左连接匹配行,这些行具有与左侧相同的值。我希望连接忽略左表中的空值而不是尝试匹配它们。
如果左表列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时,如果只有一列匹配则行连接。
感谢。
答案 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)