sql - SQL 查询 - 使用 ALL 和 '=' 运算符未获得预期结果
问题描述
我有一张桌子:
id name
1 A
3 B
2 C
4 D
我正在尝试在存储过程中使用以下查询选择几行:
select * from test where id = all ('{1,2}');
我希望它返回 id 为 1 和 2 的行,但是,它返回空。
以下查询按预期工作:
select * from test where id <> all ('{3,4}');
它返回 id 为 1 和 2 的行。我无法理解为什么 '=' 运算符没有按预期工作,但 '<>' 正在工作。我是这种语法的新手。请帮助如何获得使用相等运算符(相当于 IN)的预期结果。
解决方案
我期望它返回 id 为 1 和 2 的行
你想要any
,而不是all
:
where id = any ('{1,2}');
这带来id
了 要么 等于1
要么2
。换句话说,这相当于id in (1, 2)
.
关于这个表达:
where id <> all ('{3,4}');
这相当于:
where not (id = any ('{3,4}'));
所以这会过滤掉id
s3
和4
.
关于你原来的表达:
where id = all ('{1,2}');
这根本不符合逻辑; 单个值不能一次与数组的所有值匹配 - 所以这会过滤掉所有行。
推荐阅读
- terraform - 使用虚拟机规模集部署 Service Fabric
- r - 创建按组加起来为 1 的随机比率
- html - 为什么 4 个具有 `width: 25vw;` 的 div 不能对齐?
- reactjs - 使用反应测试库测试反应中的嵌套方法
- regex - 当脚本文件来自 zsh 时,为什么 BASH_REMATCH 返回空?
- java - 如何在 Spring Data JDBC 中插入默认值
- c - DevC++ 没有在我的代码中读取 typedef 结构
- d3.js - D3js Force Link 标签未显示
- python - 使用列表的 Python 程序
- jsp - Servlet doGet 在简单的 get 方法上返回 404?