我有一种情况,我需要将数据插入到两个表中,其中插入的数据来自同一个长子查询。我知道CTE在类似的情况下会很有帮助,因为您可以定义一次子查询,并在后续语句中的多个地方重用它。问题是我没有一个语句要使用子查询,我有两个,我的理解是CTE只能在一个语句中使用。
所以我的问题是我怎样才能避免重复
SELECT col1
FROM table3
WHERE col2 > 5
AND col2 < 10
ORDER BY col2 DESC
下面的部分?
INSERT INTO table1 (col1, othercol)
SELECT col1, 'foo'
FROM
(SELECT col1 FROM table3 WHERE col2 > 5 AND col2 < 10 ORDER BY col2 DESC);
INSERT INTO table2 (col1, othercol)
SELECT col1, 'bar'
FROM
(SELECT col1 FROM table3 WHERE col2 > 5 AND col2 < 10 ORDER BY col2 DESC);
2条答案
按热度按时间c0vxltue1#
请参见示例。
CTE只能在单个语句中使用。
返回条款很有用。
CTE中的第一个删除操作返回所有删除的行。
然后将它们插入第二个表。
我们可以在查询计划中看到,内部查询运行1次。
下一个查询与更高的查询相同
xqkwcwgp2#
先把它写成一个临时表。
使用比tmp更好的名称:)