我有几个要加入的表,其中一个可以有未知数量的匹配项,最多 6 个。每个匹配项都应作为初始查询中的行值返回。例如:
SELECT a.ID, a.match1, a.match2, a.match3, a.match4, a.match5, a.match6
FROM table1 a, (SELECT ID, match FROM table2 WHERE a.ID = table2.ID) b
WHERE a.ID = b.ID
这可能不是正确的语法,但希望它显示了我需要的东西。所以嵌套查询可以返回 1 个匹配或 5 个匹配。每个匹配应该是对应列名的值,即 a.match1 = 第一个匹配,b.match2 = 第二个匹配等。
如果我需要进一步解释,请告诉我。我知道这不是使用的最佳模式,但它是我被告知要使用的模式。
答案 0 :(得分:0)
SQL 不喜欢未知数量的列。
作为一个快速的技巧,您可以聚合数组中的所有匹配项,然后围绕它进行查询,将匹配项转换为预定义的(大量)列数。
像这样:
with data as (
select $1 id
from (values(1),(2))
), data2 as (
select $1 id, $2 match
from (values(1, 'a1'),(1, 'a2'),(2, 'b1'),(2, 'b2'),(2, 'b3'))
)
select id, matches[0], matches[1], matches[2], matches[3]
from (
select a.id, array_agg(match) matches
from data a
join data2 b
on a.id=b.id
group by 1
);