这是我的架构和数据
create table mytable (id numeric, val text);
create table mytable1 (id1 numeric, id text);
insert into mytable values (123, 'aaa');
insert into mytable values (124, 'bbb');
insert into mytable values (125, 'ccc');
insert into mytable1 values (1001, '[123]');
insert into mytable1 values (1002, '[123,124]');
insert into mytable1 values (1003, '[123,124,125]');
当我运行以下查询时,我得到了预期的结果。
select string_to_array(trim(mt1.id, '[]'), ',')::numeric[] from mytable1 mt1 where mt1.id1 = 1003
结果:
123,124,125
但是,当我将上述查询作为选择查询的内部查询传递时,我没有得到结果
select mt.val from mytable mt where mt.id = any (select string_to_array(trim(mt1.id, '[]'), ',')::numeric[] from mytable1 mt1 where mt1.id1 = 1003)
预期结果:
val
---
aaa
bbb
ccc
查询有什么问题吗?
(使用 Postgresql-9.1)
问题是:
不返回数组,它返回一组数组(即使它只是一行 - 它仍然是一组)
如果您确定您的子查询总是返回一行,您可以简单地将选择的结果转换为一个数组:
您实际上不需要两次演员表,因此可以通过删除内部演员表来简化上述内容:
你的第一个查询实际上并没有给你你所期望的(至少在我的 PostgreSQL 9.1 安装上)
这将返回一个数组结果,而不是
123,124,125
您指出的那样。按原样尝试第二个查询会产生以下输出:
这是有道理的,因为您正在尝试将
numeric
类型列与numeric[]
数组类型列进行比较。将您的
numeric[]
数组取消嵌套成这样的直线numeric
类型:应该让你做你想做的
ANY
比较,并得到你正在寻找的结果。