我有一点问题,我坚持了下来。我有两张桌子。第一个包含所有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,最好的问候, 马库斯
答案 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子句。
你能解释一下你想要返回的行的标准吗?