加入3个表,其中第3个表与表2无关

时间:2013-03-29 22:39:17

标签: php mysql

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

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行

请帮助。感谢

2 个答案:

答案 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