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