检查一个子查询以包含T-SQL中另一个的结果

时间:2017-10-14 06:33:28

标签: sql sql-server tsql group-by window-functions

我正在尝试使用以下标准编写一个应该执行join(或where子句)的查询:

  

左表的子查询应包含右表中子查询的结果(结果也应该分组)。

Tables (diagram)

sql script creating tables with data

确切的标准如下:

选择以下客户:

  

对于[ClientSegment]中的每个问题.Id的问题

     

[ClientSegmentAnswers]中的那些客户端应该是至少一个(在LINQ中的Any上相当于)ClientAnswers.AnswerId

如果不在单个查询中使用for循环(游标),我怎么能实现呢?

UPD

添加了用于创建表和数据的脚本

预期结果

选择Bob仅作为ClientSegment的匹配使用者的查询,ID = 1;

1 个答案:

答案 0 :(得分:0)

SQL JOINS将有助于在单个查询中实现此目的,

例如:

select 
c.name,
c.id,
...
from Question as que 
left join ClientSegment as cs on que.id=cs.id
left join ClientSegmentAnswers as csans on  csans.ClientSegmentID=cs.id
left join Answer as ans on ans.id=csans.answerid
left join ClientAnswer as ca on ca.answerid=ans.answerid
left join Client as c on c.id=ca.ClientID
where ca.ClientID is not null 

此查询将仅返回正在回答至少一个问题的客户端名称,您也可以根据需要修改查询。