[英]Using UNION inside of NOT IN
我正在嘗試使用NOT IN
條件進行查詢。 如果我使用子查詢我沒有問題,但是當我嘗試使用UNION
連接兩個表的結果時,我收到了一個錯誤。
這就是我正在做的事情:
SELECT *
FROM users
WHERE id NOT IN(
(
SELECT DISTINCT(user_id) AS id
FROM users_table_1
)
UNION
(
SELECT DISTINCT(user_id) AS id
FROM users_table_2
)
)
有沒有辦法通過子查詢獲得我想要的東西?
我認為您的代碼中存在語法問題。 你試圖將UNION
放在子查詢中嗎?
SELECT *
FROM users
WHERE id NOT IN(
SELECT user_id AS id
FROM users_table_1
UNION
SELECT user_id
FROM users_table_2
)
DISTINCT
關鍵字是多余的(請參閱@ ypercube的評論)。
@yasir實際上,這不是一個真正的語法問題(其他SQL數據庫接受相同的語法),而是使用bison解析器生成器實現的 MySQL查詢解析器的限制。
該錯誤源於解析器需要在兩個可能的解析樹之間進行決策,因為SELECT子查詢和子表達式都可以括在括號中。 因此,這里的最小解決方案是僅從第一個子查詢中刪除parens,即:
SELECT *
FROM users
WHERE id NOT IN(
SELECT user_id AS id
FROM users_table_1
UNION
(
SELECT user_id
FROM users_table_2
)
)
這樣你就可以“幫助”mysql消除兩個可能的解析樹之間的歧義。 在野牛術語中,這將避免轉移/減少沖突。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.