作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果他有 A 类和 B 类信用卡,我想查找员工的详细信息。
表结构如 {empid, ccno, cctype}
并假设 empid
'e1' 具有所有卡类型。
我试过类似的东西
select * from test where cctype = all('A', 'B') and empid = 'e1'
但这并没有返回任何行。
你能解释一下为什么我错了吗?任何帮助表示赞赏。提前致谢。
最佳答案
ALL
有效地扩展为 bool 值 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
关于sql - WHERE ALL 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47991490/
我是一名优秀的程序员,十分优秀!