0

我正在尝试执行以下操作:-

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 行

请帮忙。谢谢

4

2 回答 2

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 为空(这可能表明连接的表没有匹配的记录),但随后您检查 t3.c 的值结果中永远不会存在。第二个查询在连接期间过滤 t3.c,然后在 WHERE 子句中找到空匹配项,这应该有希望表明没有匹配项(取决于数据的设置方式)。

于 2013-03-29T22:43:30.923 回答
0

解决方案:

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
于 2013-03-29T23:19:37.243 回答