我正在尝试使用以下标准编写一个应该执行join
(或where
子句)的查询:
左表的子查询应包含右表中子查询的结果(结果也应该分组)。
sql script creating tables with data
确切的标准如下:
选择以下客户:
对于[ClientSegment]中的每个问题.Id的问题
[ClientSegmentAnswers]中的那些客户端应该是至少一个(在LINQ中的Any上相当于)ClientAnswers.AnswerId
如果不在单个查询中使用for循环(游标),我怎么能实现呢?
UPD
添加了用于创建表和数据的脚本
预期结果
选择Bob仅作为ClientSegment的匹配使用者的查询,ID = 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
此查询将仅返回正在回答至少一个问题的客户端名称,您也可以根据需要修改查询。