[英]MYSQL many-to-many selection with AND condition
我在 stackoverflow 中發現了一個類似的問題,但這並不是我現在面臨的問題。 我找不到比以下更好的方法來描述所需的查詢:
選擇至少具有屬性一 AND 屬性二 AND ... 的所有條目
考慮以下表格:
用戶
| id | name |
+------+--------+
| 1 | john |
+------+--------+
| 2 | liu |
+------+--------+
運動的
| id | user_id | sport |
+------+-----------+------------+
| 1 | 1 | swim |
+------+-----------+------------+
| 2 | 1 | run |
+------+-----------+------------+
| 3 | 1 | football |
+------+-----------+------------+
| 4 | 1 | volley |
+------+-----------+------------+
| 5 | 2 | swim |
+------+-----------+------------+
| 6 | 2 | run |
+------+-----------+------------+
我希望能夠進行以下查詢:
返回:
| id | name |
+------+--------+
| 1 | john |
+------+--------+
| 2 | liu |
+------+--------+
返回:
| id | name |
+------+--------+
| 1 | john |
+------+--------+
| 2 | liu |
+------+--------+
返回:
| id | name |
+------+--------+
| 1 | john |
+------+--------+
運動的數量應該是動態的。
謝謝你。
列表中的項目數量不能真正是“動態的”,至少不能超過任何值列表。
SELECT u.id, u.name
FROM users AS u
INNER JOIN sports AS s ON s.user_id = u.id
WHERE s.sport IN ('football','run','swim')
GROUP B u.id, u.name
HAVING COUNT(DISTINCT sport) = 3
;
對於更長/更短的列表,您只需要相應地調整3
。
要檢查所有 3 個你可以做的
select u.id, u.name
from users u
join sports s on s.user_id = u.id
group by u.id, u.name
having sum(sport = 'swim') > 0
and sum(sport = 'run') > 0
and sum(sport = 'football') > 0
從查詢中刪除其他選擇不需要的那些。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.