可以测试文本字符串中的每个值是否等于整数值?

时间:2014-08-01 16:01:02

标签: sql postgresql plpgsql postgresql-9.3

是否可以测试文本字符串(v1)中的每个值是否等于整数值(t2.variable)?期望的结果是SUM来自整数与其中一个文本字符串值匹配的条目的所有值。

e.g。

SELECT string_agg(id::text, ', ') INTO v1
    FROM t1;

SELECT SUM(value) INTO v2
    FROM t2
    WHERE v1 = t2.variable;

1 个答案:

答案 0 :(得分:0)

猜测您是否要测试t1 行中是否存在匹配id行。
可以使用ANY construct
执行此操作

SELECT SUM(value) INTO v2
FROM   t2
WHERE  t2.variable = ANY ((string_to_array(v1 , ', '))::int[]);

假设integer值 但这样做效率极低。转换类型来回,聚合,再次取消。容易出错并且价格昂贵。相反,直接使用EXISTS半连接进行测试:

SELECT SUM(value) INTO v2
FROM   t2
WHERE  EXISTS (SELECT 1 FROM t1 WHERE t1.id = t2.v1);