MySQL不等于不工作

时间:2013-03-19 14:17:12

标签: mysql

这是我的代码:

$query = mysql_query("SELECT P_Id, Thing,Something Date
    FROM priv
    WHERE Something = '$thing' AND thing2 <> 'This'
    LIMIT 1"
) or die(mysql_error());

代码在没有"thing2 <> 'this'"语句的情况下正常工作,但是当我实现"thing2 <> 'this'"时,它返回0结果。好像表中没有空行,但表的thing2行中有空行(NULL)。

问题是,这个“不等于”语句不起作用,我已经尝试了所有内容,但它不会返回任何值。

编辑(解释词): 列看起来像这样 - P_Id |东西|日期|事1 |事2和我需要从一行中接收P_Id,其中Something = Something和Thing1 NOT EQLAS到'this'(上例)和Thing2也不等于'this'。我知道这听起来很疯狂.Sorry

好的,所以我尝试了一些实验,并且它表示“thing2&lt;&gt;” thingy不是在thing1 / thing2列上工作,但其他列如“Something”表中也有'this'条目它正常工作(找到没有'this'条目的nerest行)。但为什么这不起作用things1和2 ???我试过重命名事物列,但没有结果。

2 个答案:

答案 0 :(得分:5)

something <> NULL will evaluate to NULL。如果在与0(或false)几乎相同的查询中使用。

请记住,SQL使用three-valued logic而不是简单的二进制逻辑。

您可能需要使用IS NULL显式检查NULL:

... OR THING IS NULL

Alernatively你可以使用NULL-safe equals operator <=>否定(这是MySQL特定的,it's not standard SQL):

... AND NOT (THING <=> 'This')

答案 1 :(得分:0)

我接受@JoachimSauer的方式。另外,我也喜欢尝试以下一种。

... WHERE Something = '$thing' AND NOT (IFNULL(thing2,'') = 'This')
LIMIT 1```