【问题标题】:correct mysql syntax for a column not equaling either of two values不等于两个值中的任何一个的列的正确 mysql 语法
【发布时间】:2013-07-17 13:46:52
【问题描述】:

我有一张“汽车”表,上面有一列颜色。我正在尝试构建一个查询,该查询将显示所有有 4 个门的汽车,但排除所有在其颜色列中记录有“红色”或“黑色”的汽车。

SELECT * FROM 'cars'
WHERE 'cars.doors = 4'
AND 'cars.colour != red OR black'

这似乎不起作用,但我不确定是不是因为我的代码中是否有其他东西弄乱了它,所以我完全搞错了。这样可以吗?

谢谢

【问题讨论】:

  • 您的其他 SQL 语法也有误。请学会区分一种文字。

标签: php mysql sql


【解决方案1】:

您将条件用单引号括起来,这是无效的。您应该只用引号将字符串括起来。对于非红色或黑色部分,您可以使用NOT IN()

SELECT * FROM `cars`
WHERE cars.doors = 4
AND cars.colour NOT IN('red', 'black')

或者,您也可以长期使用,注意使用 AND 而不是 OR,因为 OR 不适合您想要的。

AND cars.colour != 'red' AND cars.colour != 'black'

【讨论】:

  • 我认为你应该删除'cars'中的引号
【解决方案2】:

您可以使用NOT IN,引号也不正确使用backtics`作为列名和表名。

SELECT * FROM `cars`
WHERE `cars`.`doors` = 4
AND `cars`.`colour` NOT IN ('red','black')

【讨论】:

    【解决方案3】:

    在您的 where 条件下,您将 'cars.colour != red OR black' 错误地放置了

    这应该是这样的

    SELECT * FROM cars
    WHERE doors = 4
    AND colour != red AND colour != black
    

    SELECT * FROM cars
    WHERE doors = 4
    AND colour NOT IN('red', 'black')
    

    【讨论】:

    • 您的两个示例在功能上并不等效。在第一个示例中应该使用AND 而不是OR
    【解决方案4】:

    你必须明确告诉哪些字段需要比较

    SELECT * FROM `cars`
    WHERE `cars`.´doors` = 4
    AND `cars`.´colour` != 'red' AND `cars`.´colour` != 'black'
    

    您的报价也有问题。我已经更正了它们

    【讨论】:

    • AND 与 OR 相比的优先级可能会产生无法预料的结果。
    • 感谢您的更正 :) 我错过了这一点(复制/粘贴)
    【解决方案5】:

    试试

    SELECT * FROM `cars`
    WHERE cars.doors = 4
    AND cars.colour NOT IN ("red","black");
    

    【讨论】:

      【解决方案6】:
      SELECT * FROM cars WHERE (cars.doors = 4) AND ( cars.colour NOT IN ("red","black"))
      

      还有其他解决方案:

      SELECT * FROM cars WHERE (cars.door = 4) AND (cars.colour <> "red") AND (cars.colour <> "black")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多