如何过滤子查询
问题描述:
我似乎无法在这里过滤来自原始子查询的结果。我究竟做错了什么?我试图找到预定乡村和摇滚表演的顾客(6,11)。我正在使用SQL Server 2014.如何过滤子查询
SELECT cs.CustomerID
FROM cs
(SELECT ms.StyleName, ms.StyleID, cs.CustomerID
FROM Musical_Styles ms
INNER JOIN Entertainer_Styles es
ON ms.StyleID = es.StyleID
INNER JOIN Engagements egs
ON es.EntertainerID = egs.EntertainerID
INNER JOIN Customers cs
ON egs.CustomerID = cs.CustomerID
WHERE es.StyleID IN (6, 11))
答
您的语法稍微偏离。
SELECT cs.CustomerID
FROM cs
where cs.CustomerID IN
(
SELECT cs.CustomerID
FROM Musical_Styles ms
INNER JOIN Entertainer_Styles es
ON ms.StyleID = es.StyleID
INNER JOIN Engagements egs
ON es.EntertainerID = egs.EntertainerID
INNER JOIN Customers cs
ON egs.CustomerID = cs.CustomerID
WHERE es.StyleID IN (6, 11)
)
子查询需要返回ID列表(作为唯一的列),并说其中cs.CustomerID,你是在告诉DBMS只返回这些客户的ID通过您的子查询返回。
答
在这里使用子查询有什么意义?如果这不能提供您想要的结果,我认为您的数据模型可能需要一些额外的解释。
SELECT cs.CustomerID FROM Entertainer_Styles es
INNER JOIN Engagements egs ON es.EntertainerID = egs.EntertainerID
INNER JOIN Customers cs ON egs.CustomerID = cs.CustomerID
WHERE es.StyleID IN (6, 11)
+0
我需要理解为学校过滤子查询的概念。对于我来说,当你可以简单地用初始子查询来过滤所有东西时,它确实没有意义。 –
+0
这是因为你的示例IMO不需要子查询。 – orhtej2
您可以筛选子查询(在子查询中),就像您可以筛选蚂蚁查询一样。但我不明白为什么在这里使用子查询 – jean