使用AND / OR的SQL语句问题

时间:2018-07-28 00:16:26

标签: mysql sql

你好,我试图在phpMyAdmin中执行此SQL语句,但是当我执行下面的语句时,无论type是否不同于CREDIT而不是CREDIT,例如,它都会返回所有项目。

An item with CREDIT which level is REGULAR (therefore != PLATINUM or GOLD)

SELECT * 
FROM `items` 
WHERE `purchased_by` = 0 
AND `type` = 'CREDIT' 
AND `level` != 'PLATINUM' 
OR `level` != 'GOLD' 
ORDER BY `id` ASC

3 个答案:

答案 0 :(得分:3)

如果您不熟悉基本逻辑,请使用括号。您似乎不了解 I am 3 days and 7 years oldAND的优先级。

不过,根据您的情况,您可以使用OR来解决问题:

NOT IN

请注意,您还可以通过将SELECT i.* FROM items i WHERE purchased_by = 0 AND type = 'CREDIT' AND level NOT IN ('PLATINUM', 'GOLD') ORDER BY id ASC; 更改为OR来修正逻辑-这实际上是您真正想要的逻辑。但是,AND不太模糊。而且,它更容易编写。

答案 1 :(得分:0)

问题在于操作的顺序,因此AND的优先级高于OR,因此,如果包含括号,它将为您确定顺序。看起来像这样。

SELECT * 
FROM `items` 
WHERE `purchased_by` = 0 
AND `type` = 'CREDIT' 
AND (`level` != 'PLATINUM' OR `level` != 'GOLD')
ORDER BY `id` ASC

答案 2 :(得分:-1)

您应该同时尝试AND/OR

SELECT * 
FROM `items` 
WHERE `purchased_by` = 0 
AND `type` = 'CREDIT' 
AND (`level` != 'PLATINUM' OR `level` != 'GOLD')
ORDER BY `id` ASC

说明:

好吧,我为使用OR的2个子句添加了括号,因此这意味着水平不是白金或黄金,其余所有子句都使用AND。

该括号为这些操作员设置了优先级。