LEFT加入查询失败

时间:2014-07-08 12:52:50

标签: sql sqlite

想知道是否有人可以解释为什么我的查询没有在SQLite中提供所需的结果

我有两张桌子

表A包含许多行,其中有一个名为picklist_id的列,其中值重复,我试图获取这些值的不同值,然后检查表2中是否存在此选项列表ID。这就是我所拥有的,但我只是得到一个空结果

SELECT distinct(pt.picklist_id) from picklisttable pt LEFT JOIN pickingtable p on 
pt.picklist_id = p.picklist_id where p.picklist_id = null

有人能指出我正确的方向吗?如果表b中不存在,则我希望表中的picklist_id返回

3 个答案:

答案 0 :(得分:2)

这应该是IS NULL,而不是= NULL。

SELECT pt.picklist_id 
FROM picklisttable pt 
LEFT JOIN pickingtable p on pt.picklist_id = p.picklist_id 
WHERE p.picklist_id = null;

当要求存在数据时,EXISTS子句通常更易读,或者只处理一列时的IN子句。

SELECT pt.picklist_id 
FROM picklisttable pt 
WHERE NOT EXISTS (select * from pickingtable p where pt.picklist_id = p.picklist_id);

SELECT pt.picklist_id 
FROM picklisttable pt 
WHERE pt.picklist_id NOT IN (select p.picklist_id from pickingtable p);

或处理集合并使用EXCEPT,我认为它更具可读性:

SELECT picklist_id FROM picklisttable
EXCEPT
SELECT picklist_id FROM pickingtable;

答案 1 :(得分:1)

试试这个。相同的查询,而不是= NULL IS NULL

SELECT distinct(pt.picklist_id) from picklisttable pt LEFT JOIN pickingtable p on 
pt.picklist_id = p.picklist_id where p.picklist_id IS null

答案 2 :(得分:0)

对于你的where子句,请尝试" p.picklist_id为null"而不是" p.picklist_id = null"