在()中的Where里面传递一个查询

时间:2013-10-07 14:29:22

标签: sql database postgresql

我的查询看起来像这样,

select * from tbl1 where field1 in (select field2 from tbl2 where id=1)
  • 其中field1的类型为整数
  • select field2 from tbl2 where id=1将返回'1,2,3'这是一个字符串

显然,我们不能传递字符串以检查整数类型的字段。我要问的是,如何解决上述问题?或者有没有替代解决方案?

我的DBMS:Postgresql 9.0.3

3 个答案:

答案 0 :(得分:2)

select *
from tbl1
where field1 in (
    select regexp_split_to_table(field2, ',')::int
    from tbl2
    where id=1
)

Igor

建议的变化
select *
from tbl1
where field1 = any (
    select regexp_split_to_array(field2, ',')::int[]
    from tbl2
    where id=1
)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您需要先使用regex_split_to_array()方法拆分输入,然后通过将这些ID转换为整数来使用这些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来自第二个查询的结果。