我正在尝试隔离那些
[table]
的记录,其中only具有特定的(比方说bad)属性。不良属性是那些 ID 为 3、6 和/或 7 的属性。为此,我提出了以下解决方案:
SELECT * FROM (SELECT DISTINCT x, y, id_attribute FROM [table])
HAVING SUM(CASE WHEN id_attribute IN (3, 6, 7) THEN 0 ELSE 1 END) = 0
这效果很好。我现在想更进一步,删除
(3, 6, 7)
上的硬编码,因为不良属性可能会改变。所以,我想用 (3, 6, 7)
替换 (SELECT DISTINCT id_attribute from [other_table] where description = 'bad')
。
但是,当我将两者放在一起时,我的查询失败并显示以下消息:
无法对包含聚合或子查询的表达式执行聚合函数。
还有其他方法可以做到这一点吗?
您可以使用
Left Join
来隔离那些不良属性:
SELECT * FROM (
SELECT DISTINCT x, y, id_attribute,other_table.id as other_id_attribute FROM [table]
left join other_table on id_attribute=other_table.id
)
GROUP by ....
HAVING SUM(CASE WHEN other_id_attribute is not null THEN 0 ELSE 1 END) = 0