所有预期

我想找到一个员工的细节,如果他有A型的信用卡和B.所有预期

表结构就像是{empid, ccno, cctype}并假设empid“E1”拥有所有卡不工作类型。

我想是这样

select * from test where cctype = all('A', 'B') and empid = 'e1' 

但这并不返回任何行。

你能解释我为什么错了吗?任何帮助表示赞赏。提前致谢。

回答:

ALL被有效地扩展为布尔and

select * 

from test

where cctype = 'A'

and cctype = 'B'

and empid = 'e1'

由于cctype不能同时AB没有行返回:您查询是等效的。

平等检查(=)是具有ALL,比较运算符(><<>)是更有用很少有用。

如果你想找到这两种类型的人,你必须使用聚合或分析功能在关键:

select empid 

from test

where cctype in ('A', 'B')

group by empid

having count(distinct cctype) = 2

select * 

from (select t.*

, count(distinct cctype) over (partition by empid) as ct

from test t

where cctype in ('A', 'B')

)

where ct = 2

以上是 所有预期 的全部内容, 来源链接: utcz.com/qa/264695.html

回到顶部