在mysql db中选择1或0的问题

时间:2010-03-17 06:24:33

标签: sql mysql

我遇到以下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都具有相同的结果......

2 个答案:

答案 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。这可能不是你犯的错误,但让我们看看你的整个查询。