【发布时间】:2017-09-29 10:38:26
【问题描述】:
SELECT c.id,c.email,cs.Source
FROM contact c INNER JOIN contactsource__C cs ON cs.contactid__c = c.id
WHERE cs.Source IN (SELECT cs.Source FROM contact c
INNER JOIN contactsource__C cs ON cs.contactid__c = c.id
WHERE cs.Source = 'DOGS')
AND cs.Source IN (SELECT cs.Source FROM contact c
INNER JOIN contactsource__C cs ON cs.contactid__c = c.id
WHERE cs.Source = 'CATS')
我想要一个包含“DOGS”和“CATS”作为来源的电子邮件列表。
Source 将位于 table:contactsource 中的单独行上,但具有相同的 contact_id(即 table:contact 中的 PK id)
当我运行这个时我没有得到任何结果(单独运行子查询确实会返回结果,并且有些情况下源是 CATS 和 DOGS,在单独的行中注明)
【问题讨论】:
-
尝试将子查询中的选择列和条件列设置为更低或更高
-
为什么要使用子查询?你可以简单地说
WHERE cs.Source IN ('DOGS', 'CATS'),因为这是所有子查询都可以返回的。 -
左对齐 SQL 使代码更难阅读和更正。
-
添加一些示例表数据和预期结果。 (作为格式化文本,而不是图像。)
-
不要在子查询内外使用相同的别名。至于为什么它不起作用:cs记录只有一个来源,它不能同时匹配'DOGS'和'CATS'。因此,它不应该是您在子查询中寻找的来源,而是联系人 ID。
标签: sql sql-server join subquery ssms