我有一个看起来像这样的查询,
select * from tbl1 where field1 in (select field2 from tbl2 where id=1)
- 其中 field1 是整数类型
- 并将
select field2 from tbl2 where id=1
返回 '1,2,3' 这是一个字符串
显然,我们不能传递字符串来检查整数类型的字段。我要问的是,如何解决上述查询?或者是否有任何替代解决方案?
我的数据库管理系统:Postgresql 9.0.3
我有一个看起来像这样的查询,
select * from tbl1 where field1 in (select field2 from tbl2 where id=1)
select field2 from tbl2 where id=1
返回 '1,2,3' 这是一个字符串显然,我们不能传递字符串来检查整数类型的字段。我要问的是,如何解决上述查询?或者是否有任何替代解决方案?
我的数据库管理系统:Postgresql 9.0.3
select *
from tbl1
where field1 in (
select regexp_split_to_table(field2, ',')::int
from tbl2
where id=1
)
伊戈尔建议的变化
select *
from tbl1
where field1 = any (
select regexp_split_to_array(field2, ',')::int[]
from tbl2
where id=1
)
select * from tbl1 where cast(field1 as varchar) in (select field2 from tbl2 where id=1)
您需要首先使用regex_split_to_array()方法拆分输入,然后通过将它们转换为整数来使用这些 ID
尝试这个 -
select * from tbl1 where field1 in
(select NULLIF(x[1],'')::int,NULLIF(x[2],'')::int,NULLIF(x[3],'')::int from
(select regex_split_to_array(field2) from tbl2 where id=1) as dt(x))
假设您已经知道元素的数量,即在这种情况下为 3,来自第二个查询的结果。