首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找到全部或无

找到全部或无
EN

Stack Overflow用户
提问于 2020-03-02 05:39:58
回答 2查看 53关注 0票数 0

我有四张桌子,详细描述了一个游乐园和它的客人的骑乘历史。

代码语言:javascript
复制
   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),他们要么骑过所有的童车,要么没有孩子的游乐?

预期产出将是:

代码语言:javascript
复制
g_id
 1
 2

我似乎想不出最简单的办法是什么。我似乎只能想到一张桌子,里面有客人骑过小孩的所有箱子。我的尝试是4路内连接的桌子,并过滤出c_id =“基迪”。任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-02 06:28:38

你可以试试下面的逻辑-

3在查询中是固定的,以获得类别"Kiddie“。

这里的演示

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2020-03-02 06:34:32

代码语言:javascript
复制
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')
                               )

小提琴

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60483093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档