我在数据库中有两个表:

CREATE TABLE items(
 id SERIAL PRIMARY KEY,
 ... some other fields
);

该表包含带有唯一ID的Come数据行。
CREATE TABLE some_chosen_data_in_order(
 id SERIAL PRIMARY KEY,
 id_items INTEGER[],
);

该表包含数组类型字段。每行包含表items中ID的值的特定顺序。例如:{2,4,233,5}

现在,我想从表items中获取数据,以便从表some_chosen_data_in_order中选择行,并以数组类型的元素顺序。

我的尝试是加入:
SELECT I.* FROM items AS I
JOIN some_chosen_data_in_order AS S ON I.id = ANY(S.id_items) WHERE S.id = ?

第二次尝试是子查询,例如:
SELECT I.* FROM items AS I
WHERE I.id = ANY
(ARRAY[SELECT S.id_items FROM some_chosen_data_in_order  WHERE id = ?])

但是它们中没有一个将ID与数组字段中的ID保持相同的顺序。您能帮我吗,如何从items表中获取数据,并与特定行的some_chosen_data_in_order表中的数组ID顺序相对应?

最佳答案

SELECT t.*
FROM unnest(ARRAY[1,2,3,2,3,5]) item_id
LEFT JOIN items t on t.id=item_id

上面的查询从items表中依次选择ID为1,2,3,2,3,5的项目。

10-06 12:08