如何过滤子查询

问题描述:

我似乎无法在这里过滤来自原始子查询的结果。我究竟做错了什么?我试图找到预定乡村和摇滚表演的顾客(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)) 
+1

您可以筛选子查询(在子查询中),就像您可以筛选蚂蚁查询一样。但我不明白为什么在这里使用子查询 – jean

您的语法稍微偏离。

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