2

我有一个看起来像这样的查询,

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

4

3 回答 3

2
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
)
于 2013-10-07T14:41:12.587 回答
0

select * from tbl1 where cast(field1 as varchar) in (select field2 from tbl2 where id=1)

于 2013-10-07T14:34:44.473 回答
0

您需要首先使用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,来自第二个查询的结果。

于 2013-10-07T14:45:52.293 回答