MySQL离开加入,结果较少

时间:2012-05-09 12:28:42

标签: mysql join

我有一点问题,我坚持了下来。我有两张桌子。第一个包含所有id,第二个包含一些,但不是全部来自tableA,值和相应的标识符。正如我以为我理解了它,如果id在tableB中不存在,那么id的左连接应该在第一个表中给我所有id,而在第二个表中为null。但我不断得到两个表中存在的id的数量。我的概念错了吗?

到目前为止我的发言是:

SELECT tableA.id, tableB.desiredValue
FROM tableA 
LEFT JOIN tableB ON tableA.id=tableB.item_id
WHERE tableB.element_id = 'something'
OR tableB.element_id IS NULL;

任何指针?

Thanx,最好的问候, 马库斯

3 个答案:

答案 0 :(得分:1)

将涉及tableB列的条件从WHERE移至ON

SELECT tableA.id, tableB.desiredValue
FROM tableA 
LEFT JOIN tableB ON  tableA.id=tableB.item_id
                 AND tableB.element_id = 'something'

--- WHERE tableB.element_id IS NULL        --- this is probably not appropriate
;

答案 1 :(得分:0)

试试这个

SELECT tableA.id, tableB.desiredValue
FROM tableA 
LEFT JOIN tableB ON tableA.id=tableB.item_id
AND (tableB.element_id = 'something'
OR tableB.element_id IS NULL);

答案 2 :(得分:0)

一般来说,这似乎应该有效。但是,在where子句中我会更具体:

SELECT tableA.id, tableB.desiredValue
FROM tableA 
LEFT JOIN tableB ON tableA.id = tableB.item_id
WHERE tableB.element_id = 'something' OR tableB.item_id IS NULL;

我已将item_id替换为我正在检查NULL的行 - 尽管它应该有所不同,除非element_id可以是行NULL加入工作。

你能否扩展为什么你想要where子句的其他部分 - tableB.element_id = 'something'?如果您只想要返回所有行,我的一般建议是完全消除WHERE子句。

你能解释一下你想要返回的行的标准吗?