我正在尝试执行以下操作:-
SELECT t1.a, t1.b, t2.a, t2.b, t3.a, t3.b, t3.c
FROM t1 LEFT JOIN t2 ON t1.b = t2.b
LEFT JOIN t3 ON t2.b <> t3.b
WHERE t3.c = 'someuser'
结果:- 我在 t3 中获得了相关联的 t2 行
预期结果:- 获取 t3 中未关联的 t2 行
请记住,具有不匹配记录的左连接将导致t3
. 我改变了最后两行。试试这个:
SELECT t1.a, t1.b, t2.a, t2.b, t3.a, t3.b, t3.c
FROM t1 LEFT JOIN t2 ON t1.b = t2.b
LEFT JOIN t3 ON t2.b = t3.b
WHERE t3.c = 'someuser' and t3.b is null
虽然,如果你对 t3 进行条件检查,它总是会是假的(当不检查 null 时)......
也许你想要这个?
SELECT t1.a, t1.b, t2.a, t2.b, t3.a, t3.b, t3.c
FROM t1 LEFT JOIN t2 ON t1.b = t2.b
LEFT JOIN t3 ON t2.b = t3.b and t3.c = 'someuser'
WHERE t3.b is null
这两个查询之间的区别是:第一个查询应该始终返回 0 行,因为您期望 t3.b 为空(这可能表明连接的表没有匹配的记录),但随后您检查 t3.c 的值结果中永远不会存在。第二个查询在连接期间过滤 t3.c,然后在 WHERE 子句中找到空匹配项,这应该有希望表明没有匹配项(取决于数据的设置方式)。
解决方案:
SELECT t1.a, t1.b, t2.a, t2.b, t3.a, t3.b, t3.c
FROM t1 LEFT JOIN t2 ON t1.b = t2.b
LEFT JOIN t3 ON t2.b = t3.b and t3.c = 'someuser'
WHERE t3.b is null GROUP BY t3.c