Select

單個 AND 運算符和多個 OR 運算符

  • August 26, 2019

我想選擇一個 user_id 為 1 且 category_id 可以是 1、2 或 3 的 record_id。每條SELECT語句都應返回 1 條記錄。

在此處查看我的範例表:

我如何在 SQL 中做到這一點?我試過這個 SQL 語句:

SELECT record_id
FROM tbl_people
WHERE category_id=1 OR category=id=2 OR category_id=3
OR category_id=4 OR category_id=5 OR category_id=6 
AND user_id = 1;

…但它不起作用。

這是因為在 SQLite 中,AND運算符的優先級高於OR(請參閱此SQLite 文件頁面上的運算符部分)

這意味著 SQLite 首先計算category_id=6 AND user_id = 1表達式,然後將OR其結果與所有其他category_id條件一起計算。

因此,您的查詢將返回category_id1、2、3、4 或 5 或category_id6 和user_id1 的所有記錄。

您應該添加括號以強制OR首先評估 s:

SELECT record_id 
FROM tbl_people 
WHERE 
(
   category_id=1 OR 
   category_id=2 OR 
   category_id=3
)
AND user_id = 1;

或者,您可以使用 SQLIN運算符使其更簡潔:

SELECT record_id 
FROM tbl_people 
WHERE category_id IN (1, 2, 3) 
AND user_id = 1;

另外,請注意您有一個錯字:在您的WHERE子句中有一個category=id,它可能應該是category_id.

**更新:**這是一個嘗試查詢的連結:http ://www.sqlfiddle.com/#!7/d7ad3/1

引用自:https://dba.stackexchange.com/questions/17860