[英]Query in many to many relationship - mySQL
我有以下表格,表格A和表格B
表A(用戶)
userid name
--------------------
1 Sam
2 David
表B(業余愛好者)
hobbyid hobby
--------------------
1 singing
2 drawing
我有一個過渡表(很多對很多關系)
表C(user_hobby)
userid hobbyid
--------------------
1 1
2 2
1 2
我想查詢一個條件,我想知道哪個用戶的愛好等於“繪畫”(愛好2),但不等於“唱歌”(愛好1)。 沒有子查詢如何實現呢?
我嘗試了以下查詢
SELECT *
FROM hobbylist
JOIN user_hobby AS uh
ON hobbylist.hobbyid = uh.hobbyid
JOIN users AS us
ON us.userid = uh.userid
WHERE hobby = "drawing"
AND hobby <> "singing"
由於上述查詢,我仍然得到兩個用戶。 應該只顯示用戶= David。
不使用子查詢如何實現呢?
Group by
。 這會將結果匯總到特定用戶的單行中。 Having
with Sum()
來過濾案例。 Sum(hobby = 'drawing')
對於將繪畫作為嗜好的用戶將是肯定的。 對於根本沒有唱歌為業余愛好的用戶, Sum(hobby = 'singing')
將為零。 請嘗試以下操作:
SELECT us.userid,
us.name
FROM hobbylist
JOIN user_hobby AS uh
ON hobbylist.hobbyid = uh.hobbyid
JOIN users AS us
ON us.userid = uh.userid
GROUP BY us.userid,
us.name
HAVING Sum(hobby = 'drawing')
AND Sum(hobby = 'singing') = 0
您可以使用group by
並having
:
select uh.userid
from user_hobby uh join
hobby h
on h.hobbyid = uh.hobbyid
where h.hobby in ('drawing', 'singing')
group by uh.userid
having min(h.hobby) = max(h.hobby) and min(h.hobby) = 'drawing';
請注意,要獲取userid
,您不需要users表。
嘗試一個內部聯接:
select * from hobbylist, user_hobby, users where users.userid = user_hobby.userid and hobbylist.hobbyid = user_hobby.hobbyid and hobbylist.hobby = "drawing" and hobbylist.hobby <> "singing"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.