ERROR: syntax error at or near "text" Position: 314
ERROR: syntax error at or near "text" Position: 314
我写了一个查询,它应该对数组中的每个值执行检查,如果它存在于任何 table 中,但我得到
ERROR: syntax error at or near "text"
你能告诉我我做错了什么吗?
我的查询:
DECLARE
words text[];
w text;
BEGIN
words := string_to_array('a b c', ' ');
FOR EACH w IN array(words) LOOP
EXECUTE 'SELECT * FROM users WHERE w IN (last_name, first_name, middle_name)';
END LOOP;
END;
UPD
忘记指出了,应该可以在words变量中放入任何字符串。查询应该适用于像 'a b c'
或 'a'
或 'bc a d'
这样的字符串。 对不起。
我不明白过程和循环的意义所在。据我了解您的问题,您可以通过直接查询获得所需的结果,如下所示:
select u.*
from users u
where exists (
select 1
from unnest(string_to_array('a b c', ' ')) x(val)
where x.val in (u.last_name, u.first_name, u.middle_name)
)
我写了一个查询,它应该对数组中的每个值执行检查,如果它存在于任何 table 中,但我得到
ERROR: syntax error at or near "text"
你能告诉我我做错了什么吗?
我的查询:
DECLARE
words text[];
w text;
BEGIN
words := string_to_array('a b c', ' ');
FOR EACH w IN array(words) LOOP
EXECUTE 'SELECT * FROM users WHERE w IN (last_name, first_name, middle_name)';
END LOOP;
END;
UPD
忘记指出了,应该可以在words变量中放入任何字符串。查询应该适用于像 'a b c'
或 'a'
或 'bc a d'
这样的字符串。 对不起。
我不明白过程和循环的意义所在。据我了解您的问题,您可以通过直接查询获得所需的结果,如下所示:
select u.*
from users u
where exists (
select 1
from unnest(string_to_array('a b c', ' ')) x(val)
where x.val in (u.last_name, u.first_name, u.middle_name)
)