簡體   English   中英

SQL 查詢檢索所有匹配列,多對多關系

[英]SQL query to retrieve all matching columns, many to many relations

我有三個數據庫表,我想知道如何通過他們的 interest_id 檢索所有具有特定興趣的人。 例如,我想找到所有 interest_id 為 1 和 5 的人。所以在這種情況下就是 john 和 scott。 如何使用 SQL 查詢實現此目的?

人員編號 名稱
1個 約翰
2個 彼得
3個 斯科特

利益

interest_id 描述
1個 溜冰
2個 攀登
3個 電影
4個 汽車
5個 音樂

person_interest_relation

人員編號 interest_id
1個 1個
1個 5個
2個 3個
2個 5個
3個 1個
3個 3個
3個 4個
3個 5個

我嘗試使用 SELECT * FROM person p JOIN person_interest_relation pir ON p.person_id = pir.person_id WHERE pir.interest_id IN (1, 5) 進行過濾

但是,這將返回 interest_id 為 1 或 5 的所有行,因此在本例中它也將返回 peter,因為他也對 id 5 感興趣。我只想要兩者都匹配的行,因此 1 和 5。

附言。 實際的數據庫要大得多,這只是其中的一小部分。 因此,我最好需要一些可以搜索它並且只返回具有兩種興趣的人的東西。

我們可以在這里使用聚合方法:

SELECT p.person_id, p.name
FROM person p
INNER JOIN person_interest_relation pir
    ON pir.person_id = p.person_id
WHERE pir.interest_id IN (1, 5)
GROUP BY p.person_id, p.name
HAVING COUNT(DISTINCT pid.interest_id) = 2;

暫無
暫無

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

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