Sql Postgres,以1:1的比例执行多个查询
我必须同时运行3个查询。在第一条语句中,我得到了接下来两条语句的运行次数。问题是最后一个命令的执行次数超出了需要。 我写的查询是:Sql Postgres,以1:1的比例执行多个查询,sql,postgresql,Sql,Postgresql,我必须同时运行3个查询。在第一条语句中,我得到了接下来两条语句的运行次数。问题是最后一个命令的执行次数超出了需要。 我写的查询是: WITH rows_1 AS ( SELECT t1.name, t1.value FROM table1 AS t1 INNER JOIN aux_table2 AS ps ON ps.id = t1.id AND ps.value='pepe' ) , rows_2 AS ( INSERT INTO table2
WITH rows_1 AS (
SELECT t1.name, t1.value
FROM table1 AS t1
INNER JOIN aux_table2 AS ps
ON ps.id = t1.id AND ps.value='pepe'
)
, rows_2 AS (
INSERT INTO table2 (value1, value2)
SELECT 'value1', 'value2' FROM rows_1 as sr
RETURNING id
)
INSERT INTO table3
(value1, value2, value3)
SELECT sr.value, st.id, sr.name,
FROM rows_1 AS sr, rows_2 AS st
;
问题是,第一个查询给出了我们拥有的对象的数量(N),接下来的两个查询每次必须执行N次,因此两个插入的比率是1:1,我无法实现,最后一个当前执行NxN次 目前还不清楚这些表格是如何排列的。进入
行_2
的行都是相同的,除了此查询中不可见的默认值
也就是说,您可以将一个序列号添加到每个行集合中,并将其用于连接
:
WITH rows_1 AS (
SELECT t1.name, t1.value, ROW_NUMBER() OVER () as seqnum
FROM table1 t1 JOIN
aux_table2 ps
ON ps.id = t1.id AND ps.value='pepe'
),
rows_2 AS (
INSERT INTO table2 (value1, value2)
SELECT 'value1', 'value2'
FROM rows_1 sr
RETURNING id
)
INSERT INTO table3 (value1, value2, value3)
SELECT sr.value, st.id, sr.name,
FROM rows_1 sr JOIN
(SELECT ROW_NUMBER() OVER (ORDER BY id) as seqnum
FROM rows_2 st
) st
ON st.seqnum = sr.seqnum;
我只需要添加一个小的修改,但效果很好!谢谢