簡體   English   中英

連接解決方案的等效子查詢

[英]subquery equivalent for a join solution

我們有兩個表,用戶,電子郵件。 他們與User.id == Emails.user_id有關系。 如果我們對那些擁有多個不同電子郵件的用戶感興趣,使用join我們可以通過這個JOIN來完成:

SELECT * FROM User 
  JOIN Emails as EM1 ON User.id = Emails.user_id
  JOIN Emails as EM2 ON User.id = Emails.user_id
   Where EM1.address_line != EM2.address_line;

我們如何使用subquery獲得相同的結果?

您可以使用相關子查詢:

select u.*
from users u
where (select count(*)
       from emails e
       where e.user_id = u.id
      ) >= 2;

您可以使用僅從用戶擁有多個 email 地址的Emails中返回user_id的子查詢。

然后將其加入該user_id上的User表:

SELECT  *
  FROM  User u
    INNER JOIN (
               SELECT  user_id
                 FROM  Emails
                 GROUP BY user_id
                 HAVING COUNT(*) > 1
               ) a ON a.user_id = u.id

只有當該用戶的Emails表中有不止一行時,子查詢才會返回user_id ,這是您所要求的。

注意:SQL 未經測試。

暫無
暫無

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

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