我有一个表,该表在两列(code
和print
中具有唯一约束,以及一个代码和打印数组。见下文:
// these two arrays can get very big
codes: ('A', 'B', 'C', 'D')
prints: (1, 2, 3, 4)
有没有办法在一个查询中获取代码 A 的行并打印 1、代码 B 和打印 2,依此类推?我最初的想法是使用SELECT * FROM table WHERE code IN (...)
查询,但我不太确定如何将print
正确"映射"到正确的code
。
如果有什么不合理的地方,请告诉我,我会尽力澄清。谢谢!
你可以试试这个:
SELECT t.*
FROM table AS t
INNER JOIN unnest(array['A', 'B', 'C', 'D'], array[1, 2, 3, 4]) AS a(code, print)
ON t.code = a.code
AND t.print = a.print
两个数组中的每个元素在unnest()
函数中根据它们在数组中的顺序二二耦合。
select the_table.*
from the_table
join unnest ('{A,B,C,D}'::text[], '{1,2,3,4}'::int[]) as t(a, b)
on (code, print) = (t.a, t.b);