我遇到以下SQL语句的问题。我以前遇到过这个问题,但我不记得我是怎么解决这个问题的。我猜这个问题是MySQL认为0为null?注意我没有显示Select语句的第一部分,因为它无关紧要。我的SQL工作。它显示的行toffline为= 1和0 ......
FROM table1 AS tb1
LEFT JOIN table2 AS tb2 ON tb2.id = tb1.id2
LEFT JOIN table3 AS tb3 ON tb3.id = tb1.id3
AND tb1.toffline = 0
我也尝试了AND NOT tb1.toffline = 1
WHERE tb1.toffline = 0都具有相同的结果......
答案 0 :(得分:3)
这是缩进有助于查看问题的地方。您的过滤是在On子句中而不是在Where子句中。
Select ..
From Table1 As tb1
Left Join Table2 As tb2
On tb2.Id = tb1.Id
Left Join Table3 As tb3
On tb3.id = tb1.id3
And tb1.toffline = 0
因此,系统将过滤Table3 之前它评估左连接到Table1。如果您尝试的是获取toffline为零的所有结果,则将最后一个过滤器移动到Where子句:
Select ..
From Table1 As tb1
Left Join Table2 As tb2
On tb2.Id = tb1.Id
Left Join Table3 As tb3
On tb3.id = tb1.id3
Where tb1.toffline = 0
编辑注意到toffline来自Table1。
答案 1 :(得分:0)
我猜这是个问题 mysql将0视为null?
不,MySQL将0和NULL视为不同的东西。甚至根本不将NULL视为值。
查询的第一部分可能实际上是相关的。你确定你在结果中看到的是tb1.toffline,还是它可能是其他东西?
考虑这个例子:
SELECT tb1.toffline AS offline,
tb2.toffline AS offline
FROM table1 AS tb1
LEFT JOIN table2 AS tb2 ON tb2.id = tb1.id2
LEFT JOIN table3 AS tb3 ON tb3.id = tb1.id3
AND tb1.toffline = 0
如果您执行该查询,您看到的“离线”可能来自tb1,或者它可能来自tb2。这可能不是你犯的错误,但让我们看看你的整个查询。