簡體   English   中英

來自多個表的SQL IN查詢

[英]SQL IN query from multiple tables

SELECT DISTINCT addresses.email FROM addresses 
WHERE addresses.user_id IN (SELECT  user_group.id_user_groups FROM user_group
WHERE id_group_groups IN (SELECT news_group.groupid_newsg FROM news_group 
WHERE newsid_news_good=1))

上面提到的SQL查詢未執行! 它被吊死,直到我停止查詢。 我在第一個SELECT語句之后嘗試了SQL運算符“ UNION”,但是它顯示了不屬於某個組的所有電子郵件地址。 我只想選擇屬於“ id_group_groups = 5”(請參閱​​下面的查詢)並已訂閱“ newsid_news_good = 1”的用戶的那些電子郵件地址。

以下查詢運行得很好:

SELECT DISTINCT addresses.email FROM addresses 
WHERE addresses.user_id IN (SELECT user_group.id_user_groups FROM user_group 
WHERE id_group_groups =5 )

有人知道第一個查詢有什么問題嗎? 幫助將不勝感激!

我認為小組選擇會使您的問題復雜化。 如果我理解正確,那么使用聯接而不是子選擇將更容易解決您的問題。

試試這樣的事情:

SELECT DISTINCT addresses.email
FROM addresses
JOIN user_group
    ON user_group.id_user_groups = adresses.USER_ID
JOIN news_group
    ON news_group.groupid_newsg = user_group.id_group_groups
WHERE newsid_news_good = 1
SELECT DISTINCT addresses.email FROM addresses 
INNER JOIN (
    SELECT  user_group.id_user_groups FROM user_group
    INNER JOIN news_group
    ON news_group.groupid_newsg = id_group_groups
    WHERE newsid_news_good=1
)
ON user_group.id_user_groups = addresses.user_id

您要使用聯接。 您正在使用的子查詢很可能是造成性能問題的原因。

SELECT DISTINCT a.email 
FROM addresses a
INNER JOIN user_group u ON u.id_user_groups AND u.id_group_groups = 5
INNER JOIN news_group n ON n.groupid_newsg = u.id_group_groups AND n.newsid_news_good = 1

我猜您正在使用MySQL,因為它在聯合中執行子查詢的工作確實很差。 解決此問題的規范方法是將它們更改為exists相關子查詢:

SELECT DISTINCT a.email
FROM addresses a
where exists (select 1
              from user_group ug 
              where ug.id_user_groups = a.user_id and
                    exists (select 1
                            from news_group ng
                            where ng.newsid_news_good = 1 and
                                  ng.groupid_news = ug.id_group_groups
                           )
             )

當然,該解決方案適用於所有數據庫。 它在MySQL中效率更高。 假設在地址表中未重復發送電子郵件,則可以刪除外部的區別。

使用join的替代方法也是可行的。 但是,它們要求與眾不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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