当我这样做时:
SELECT tabuoj.id, tabuoj.tabuo, montritaj_tabuoj.id, montritaj_tabuoj.id_de_tabuo
FROM tabuoj LEFT JOIN montritaj_tabuoj
ON (tabuoj.id=montritaj_tabuoj.id_de_tabuo)
我明白了:
id | tabuo | id | id_de_tabuo |
1 | dom | 2 | 1 |
2 | samochód | null | null |
3 | okno | 1 | 3 |
但如果我添加将id_de_tabuo列与null进行比较的位置,我就不会得到任何结果。
SELECT tabuoj.id, tabuoj.tabuo, montritaj_tabuoj.id, montritaj_tabuoj.id_de_tabuo
FROM tabuoj LEFT JOIN montritaj_tabuoj
ON (tabuoj.id=montritaj_tabuoj.id_de_tabuo)
WHERE montritaj_tabuoj.id_de_tabuo=null
如果我比较这样的例子1:
SELECT tabuoj.id, tabuoj.tabuo, montritaj_tabuoj.id, montritaj_tabuoj.id_de_tabuo
FROM tabuoj LEFT JOIN montritaj_tabuoj
ON (tabuoj.id=montritaj_tabuoj.id_de_tabuo)
WHERE montritaj_tabuoj.id_de_tabuo=1
我说得对:
id | tabuo | id | id_de_tabuo |
1 | dom | 2 | 1 |
但我需要在id_de_tabuo列中使用null的行。我做错了什么?
答案 0 :(得分:4)
尝试使用IS NULL
代替= null
这样的
SELECT tabuoj.id, tabuoj.tabuo, montritaj_tabuoj.id, montritaj_tabuoj.id_de_tabuo
FROM tabuoj LEFT JOIN montritaj_tabuoj
ON (tabuoj.id=montritaj_tabuoj.id_de_tabuo)
WHERE montritaj_tabuoj.id_de_tabuo is null
原因:实际上
montritaj_tabuoj.id_de_tabuo is null
检查该值是否为空。而
montritaj_tabuoj.id_de_tabuo = null
检查该值是否等于NULL,这是永远不会的。
即使 NULL也不等于NULL 。你可以用它来检查。
if(null = null)
print 'equal'
else
print 'not equal'
它会打印not equal
。现在试试这个
if(null is null)
print 'equal'
else
print 'not equal'
它会打印equal
。
答案 1 :(得分:0)
当您在where子句中对左连接表进行过滤时,连接将成为内连接。要解决这个问题,请在from子句中进行过滤,如下所示:
FROM tabuoj LEFT JOIN montritaj_tabuoj
ON (tabuoj.id=montritaj_tabuoj.id_de_tabuo)
and montritaj_tabuoj.id_de_tabuo is null
where clause starts here
答案 2 :(得分:0)
尝试两个简单的选择,如
select * where id = null
和
select * where id != null
这是关于null的常见误解。 认为null是英语单词“what”,反对“没有”,你开始更好地理解它。
当sachim回答使用时
IS NULL
关于你的谓词。