我有四张桌子,详细描述了一个游乐园和它的客人的骑乘历史。
Categories
c_id name
1 Thrill
2 Leisure
3 Kiddie
Rides
r_id c_id
1 1
2 1
3 2
4 2
5 3
6 3
guest_history
h_id g_id
1 1
2 1
3 2
4 3
history_items
h_id r_id
1 5
2 6
3 1
3 2
4 5我怎么能得到所有的客人(G_Id),他们要么骑过所有的童车,要么没有孩子的游乐?
预期产出将是:
g_id
1
2我似乎想不出最简单的办法是什么。我似乎只能想到一张桌子,里面有客人骑过小孩的所有箱子。我的尝试是4路内连接的桌子,并过滤出c_id =“基迪”。任何帮助都将不胜感激。
发布于 2020-03-02 06:28:38
你可以试试下面的逻辑-
3在查询中是固定的,以获得类别"Kiddie“。
SELECT A.g_id,COUNT(C.r_id)
FROM guest_history A
INNER JOIN history_items B ON A.h_id = B.h_id
INNER JOIN Rides C ON B.r_id = C.r_id AND C.c_id = 3
GROUP BY A.g_id
HAVING COUNT(DISTINCT B.r_id) = (SELECT COUNT(r_id) FROM Rides WHERE c_id = 3)
OR COUNT(DISTINCT B.r_id) = 0发布于 2020-03-02 06:34:32
SELECT g_id
FROM Categories
NATURAL JOIN Rides
NATURAL JOIN guest_history
NATURAL JOIN history_items
GROUP BY g_id
HAVING COUNT(DISTINCT r_id) IN (0,
(SELECT COUNT(DISTINCT r_id)
FROM Categories
NATURAL JOIN Rides
WHERE name = 'Kiddie')
)https://stackoverflow.com/questions/60483093
复制相似问题