我的查询看起来像这样,
select * from tbl1 where field1 in (select field2 from tbl2 where id=1)
select field2 from tbl2 where id=1
将返回'1,2,3'这是一个字符串显然,我们不能传递字符串以检查整数类型的字段。我要问的是,如何解决上述问题?或者有没有替代解决方案?
我的DBMS:Postgresql 9.0.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来自第二个查询的结果。