[英]SQL statement issue using AND/OR
您好,我試圖在phpMyAdmin中執行此SQL語句,但是,當我執行下面的語句時,無論type
是否不同於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
如果您不熟悉基本邏輯,請使用括號。 您似乎不了解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
-這實際上是你真正想要的邏輯。 但是, NOT IN
不太模糊。 而且,它更容易編寫。
問題在於操作的順序,因此AND的優先級高於OR,因此,如果包含括號,它將為您確定順序。 看起來像這樣。
SELECT *
FROM `items`
WHERE `purchased_by` = 0
AND `type` = 'CREDIT'
AND (`level` != 'PLATINUM' OR `level` != 'GOLD')
ORDER BY `id` ASC
您應該同時嘗試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。
這是為這些操作員設置優先級的括號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.