簡體   English   中英

使用AND / OR的SQL語句問題

[英]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

如果您不熟悉基本邏輯,請使用括號。 您似乎不了解ANDOR優先級。

不過,就您而言,您可以使用NOT IN來解決問題:

SELECT i.* 
FROM items i
WHERE purchased_by = 0 AND
      type = 'CREDIT' AND
      level NOT IN ('PLATINUM', 'GOLD') 
ORDER BY id ASC;

請注意,您也可以通過改變解決您的邏輯ORAND -這實際上是你真正想要的邏輯。 但是, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM