搜索WHERE子句中的记录数组

时间:2015-08-31 17:55:09

标签: sql arrays postgresql

我有一系列记录。记录类似于(id, text_value)

我想在WHERE条款中进行搜索。我想在记录数组中包含具有特定值的行。但是,函数ANY似乎将等式视为单个值。例如:

WHERE 'one' = ANY('{one,two}'::text[])

然而,我的条款是ANY(array_of_records)。因此,左侧需要访问记录中的列。

这是否可以在WHERE子句中使用,还是应该使用plpgsql循环遍历行?

我也很高兴使用jsonjsonb来搜索任何记录数组,如果有帮助的话。

2 个答案:

答案 0 :(得分:2)

只需要删除数组并将其加入到您的表中即可。我将对您的架构做一些假设......这是您所指的记录,您可以从中创建一个数组r[]

CREATE TYPE r AS (
  id INT,
  text_value TEXT
);

这是包含您要在记录数组中搜索的值的表:

CREATE TABLE t(v) AS
VALUES ('a'), ('b'), ('c'), ('d');

现在,只需加入两个:

SELECT *
FROM t
JOIN unnest(array[row(1, 'a')::r, row(2, 'b')::r]) u
ON t.v = u.text_value

这将产生

v  id  text_value
-----------------
a  1   a
b  2   b

答案 1 :(得分:1)

我认为最简单的方法是在查询之前创建一些过滤器。

$ tmp = array();

for(i = 0; i< array.length; i ++){  如果(条件)    $ tmp [] = array [i]; }

$ query =“SELECT * FROM示例WHERE id IN(”。implode(',',$ tmp)。“)”;