所有预期
我想找到一个员工的细节,如果他有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
不能同时A
和B
没有行返回:您查询是等效的。
平等检查(=
)是具有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