簡體   English   中英

在NOT IN中使用UNION

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

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