如何过滤子查询

时间:2017-10-10 19:31:24

标签: sql

我似乎无法在此处过滤原始子查询的结果。我究竟做错了什么?我正在努力寻找已预订乡村和摇滚演出的客户(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))

2 个答案:

答案 0 :(得分:1)

在这里使用子查询的重点是什么?我认为如果这不能提供您想要的结果,您的数据模型可能需要一些额外的解释。

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)

答案 1 :(得分:0)

你的语法有点不对。

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 IN在哪里,你告诉DBMS只返回那些由你的子查询返回ID的客户。