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