【问题标题】:MySQL not equals to isn't workingMySQL 不等于不工作
【发布时间】:2013-03-08 06:34:10
【问题描述】:

这是我的代码:

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

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

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

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

好的,所以我尝试了一些实验,发现“thing2 ”thingy 不适用于 things1/thing2 列,但其他列(如“Something”表)也是“this”条目,它可以正常工作(找到没有“this”条目的最近行)。但是为什么这不适用于 things1 和 2?我尝试重命名 things 列,但没有结果。

【问题讨论】:

  • 您能否提供一些示例数据和预期输出?
  • 对不起。但是查询说明了一切(它是示例)
  • @user2107321:不,问题不包含所有信息。您可以制作一个小样本表,告诉我们内容并向我们展示测试查询的结果。这称为SSCCE(请务必关注并阅读该链接!)这是一个非常好的主意,既可以让您自己发现问题也可以与问题简明扼要。
  • 表看起来像这样 - P_Id |东西|日期 |东西1 |事物 2 和我需要从某行接收 P_Id,其中Something = Something AND Thing1 NOT EQLAS 到“this”(上例)和 Thing2 也不等于“this”。我知道这听起来很糟糕。对不起
  • 好的,您查看我链接到的 SSCCE 网站了吗?请再做一次。 1.) 创建一个 new 表,其中包含一些必要的列。 2.) 添加 几行 行,看起来与实际数据相似(带有一些 NULL 和空字符串值)。 3.)尝试您的查询(当然以修改后的形式)。 4.) 如果您设法重现您的问题,请在此处发布所有步骤#1-#3的信息。 5.) 如果您无法重现它,请找出新玩具表/查询与原始玩具表/查询之间的区别。祝你好运。

标签: mysql


【解决方案1】:

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

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

您可能需要使用IS NULL 明确检查NULL:

... OR THING IS NULL

或者,您可以将NULL-safe equals operator &lt;=&gt; 与否定一起使用(这是 MySQL 特有的,但 it's not standard SQL):

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

【讨论】:

  • 要解决这个问题,您可以使用“null-safe”等于(&lt;=&gt;)和NOT 运算符(因为没有“null-safe not equals”)。 WHERE NOT (thing2 &lt;=&gt; 'this')
  • @RocketHazmat:有趣,我不知道 MySQL 有这样的运算符。介意我将其添加到我的答案中吗?
  • @JoachimSauer:加油! :-)
  • 不起作用,它返回 thing2 等于 'This' 的行
  • @user2107321:我我是认真的。您缺少的是对您所看到的问题和您的输入数据的清晰准确的描述。当你是唯一拥有回答这个问题的必要信息的人时,你不断重复我们“它返回 x”和“不知道什么是错的”和“我错过了什么”。 要么向我们提供详细信息并创建并发布Short, Self Contained, Correct (Compilable), Example或自己解决问题。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-25
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    相关资源
    最近更新 更多