你好,我试图在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
答案 0 :(得分:3)
如果您不熟悉基本逻辑,请使用括号。您似乎不了解
I am 3 days and 7 years old
和AND
的优先级。
不过,根据您的情况,您可以使用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。
该括号为这些操作员设置了优先级。