我正在尝试执行以下操作: -
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行
答案 0 :(得分:2)
请记住,具有不匹配记录的左连接将导致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为null(可能表示连接表没有匹配的记录)但是你检查t3.c对于结果中永远不存在的值。第二个查询在连接期间过滤t3.c,然后在WHERE子句中找到空匹配,这应该有希望表明没有匹配(取决于数据的设置方式)。
答案 1 :(得分:0)
<强> SOLUTION:强>
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