根据条件列出不同的值

问题描述 投票:0回答:2

在字母列中列出不同的值,其中所有仅具有 RID 101 的字母应从列表中删除。

摆脱 字母表
100 A
101
102
101 C
104 D
101 D
106 E
102 F
108 C
108 A
104 E

输出列应为

字母表
A
E
F

因为 A、B 和 C 的 RID 101 应该被淘汰。

我该如何实现? 我试过使用 Group by 有功能吗?哪里存在但对我不起作用?感谢您的帮助

sql aggregate-functions distinct having
2个回答
0
投票

试试这个

SELECT Alphabet FROM `mytable` WHERE Alphabet NOT IN (
  SELECT Alphabet FROM `mytable` WHERE RID = 101
)

0
投票

我该如何实现?我尝试将

group by
having

一起使用

是的。您可以只使用

GROUP BY
字母(满足 distinct 要求),并使用
HAVING
子句排除那些具有禁止 RID 的字母:

select alphabet
from mytable
group by alphabet
having max(case when rid = 101 then 1 else 0 end) = 0

根据你的数据库,可能还有其他方式来表达

HAVING
谓词;例如,在支持布尔聚合的 Postgres 中:

having bool_and(rid != 101)
© www.soinside.com 2019 - 2024. All rights reserved.