首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql不存在子查询

sql不存在子查询
EN

Stack Overflow用户
提问于 2017-05-06 11:44:35
回答 1查看 553关注 0票数 1

我正在尝试用SQL做一些练习,但是我有一个很大的问题要理解一些查询。

下面是我正在使用的表格:

  • Spectacle (Spectacle_ID,Titre,日期:b,Durée,Salle_ID,Chanteur)
  • Concert (Concert_ID,Date,Heure,Spectacle_ID)
  • Salle (Salle_ID,Nom,Adresse,Capacité)
  • Billet (Billet_ID,Concert_ID,Num_Place,Catégorie,Prix)
  • Vente (Vente_ID、Date_Vente、Billet_ID、MoyenPaiement)

问题是选择所有的chanteur,他们至少在salles有一场音乐会。

解决办法是

代码语言:javascript
复制
SELECT Chanteur 
FROM Spectacle t 
WHERE NOT EXISTS (SELECT * 
                  FROM Salle u 
                  WHERE NOT EXISTS (SELECT * 
                                    FROM Spectacle v
                                    WHERE v.Chanteur = t. Chanteur 
                                      AND u.Salle_ID = v.Salle_ID)
                 )

但我不明白这个概念。

请帮助编写教程或一些解释-谢谢

EN

回答 1

Stack Overflow用户

发布于 2017-05-06 12:08:52

我明白为什么解决方案可能会令人困惑。返回要求存在其他行的结果会迫使我们垂直地而不是水平地可视化问题。希望这能帮上忙。

我们只想返回每个Chanteur中都有一个SpectacleSalle

另一种说法是返回不缺少任何ChanteurSalle

您所问的解决方案以更接近于问题的第二种形式来解决问题。只有在不存在任何没有对应的ChanteurSalle (不缺少任何Salle)的情况下,它才返回Chanteur

另一种解决方案是对每个count(distinct Salle_ID)使用聚合和Chanteur,并将其与Salle中的行总数进行比较。这似乎是更自然的措辞问题,因为每一个或有所有,而不是不错过任何。

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

https://stackoverflow.com/questions/43820044

复制
相关文章

相似问题

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