2017-10-14 173 views
-1

我想写使用下列标准应执行join(或where子句)的查询:检查一个子查询包含在T-SQL中的其他结果

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

Tables (diagram)

sql script creating tables with data

确切标准如下:

选择客户谁:

对于每个Question.Id在[ClientSegment]的questionIds

应至少一个(在任何相当于LINQ)ClientAnswers.AnswerId不同于[ClientSegmentAnswers]

我怎样才能做到这一点,而不在一个查询中使用循环(光标)?

UPD

用于创建表和数据

预期结果时间脚本

查询,其选择作为鲍勃仅匹配消费者ID为ClientSegment = 1;

回答

0

SQL连接将有助于在单个查询做到这一点,

E.g:

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 

这个查询将返回唯一CLIENTNAME谁是回答ATLEAST一个问题,你也可以修改您的需求,查询。

+0

我编辑了问题,添加了示例数据。您建议的查询不会返回预期的结果,不幸的是 –

+0

您的意思是,只想选择段类型1客户端?使用结构很难实现,因为某些答案ID适用于E.g:AnswerID - 4两种类型。但是,您可以使用左连接查询省略类型“2”。 –

+0

不,答案有外键,所以答案只属于一个问题 –

相关问题