我正在尝试用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有一场音乐会。
解决办法是
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)
)但我不明白这个概念。
请帮助编写教程或一些解释-谢谢
发布于 2017-05-06 12:08:52
我明白为什么解决方案可能会令人困惑。返回要求存在其他行的结果会迫使我们垂直地而不是水平地可视化问题。希望这能帮上忙。
我们只想返回每个Chanteur中都有一个Spectacle的Salle。
另一种说法是返回不缺少任何Chanteur的Salle。
您所问的解决方案以更接近于问题的第二种形式来解决问题。只有在不存在任何没有对应的Chanteur的Salle (不缺少任何Salle)的情况下,它才返回Chanteur。
另一种解决方案是对每个count(distinct Salle_ID)使用聚合和Chanteur,并将其与Salle中的行总数进行比较。这似乎是更自然的措辞问题,因为每一个或有所有,而不是不错过任何。
https://stackoverflow.com/questions/43820044
复制相似问题