首页 > 解决方案 > 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)的预期结果。

标签: sqlarrayspostgresqlwhere-clause

解决方案


我期望它返回 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}'));

所以这会过滤掉ids34.

关于你原来的表达:

where id = all ('{1,2}');

这根本不符合逻辑; 单个值不能一次与数组的所有值匹配 - 所以这会过滤掉所有行。


推荐阅读