如果他们没有列出监护人,我会尝试从联系人表中选择某些客户。
ClientId | ContactId | Guardian
123 | 1 | Y
123 | 2 | N
123 | 3 | N
456 | 4 | N
456 | 5 | N
456 | 6 | N
期望的输出:
ClientId | ContactId | Guardian
456 | 4 | N
456 | 5 | N
456 | 6 | N
所以我的目标是客户端456会出现在我的查询结果中,但不是客户端123.我写了以下内容:
select * from Contacts
where Guardian <> (case when Guardian = 'Y'
then Guardian
else ''
end)
我也试过
select * from Contacts c
where not exists (select 1
from Contacts c2
where c2.ContactId = c.ContactId
and c.Guardian = 'Y')
但是我的结果只是排除了Guardian = Y的行,并打印了Guardian = N的行,即使有任何与ClientId相关联的行Guardian = Y,ClientId也不应该显示在结果中。我一直在查找如何仅选择具有特定值的行,但如果其中一行匹配,我没有找到如何完全排除ClientId的运气。
我真的很感激任何建议!
答案 0 :(得分:2)
我相信您遇到这种情况的原因是因为您使用contactid
而不是clientid
来连接子查询。我还在输出中包括了不同的内容:
select distinct c.ClientId
from Contacts c
where not exists (select 1
from Contacts c2
where c2.ClientId = c.ClientId
and c2.Guardian = 'Y')
答案 1 :(得分:0)
子查询获得没有任何ClientId
的{{1}}。如果您需要完整记录,也可以使用外部查询。如果您只需要ID,则只使用子查询
Guardian = 'Y'
答案 2 :(得分:0)
select *
from contacts
where ClientId not in
(
select ClientId
from contacts
where Guardian = 'Y'
)