Sql 将2个CTE更换为1个

Sql 将2个CTE更换为1个,sql,postgresql,Sql,Postgresql,我在postgresql上有以下代码: WITH CTE1 AS ( SELECT value_1 ,position ,value_3 ,value_4 ,value_5 From tabl_1 WHERE position = 1 ) WITH CTE2 AS ( SELECT value_1

我在postgresql上有以下代码:

    WITH CTE1 AS
(
SELECT
               value_1
              ,position
              ,value_3
              ,value_4
              ,value_5
From tabl_1
WHERE position = 1 
)

WITH CTE2 AS
(
SELECT
               value_1
              ,position
              ,value_3
              ,value_4
              ,value_5
From tabl_1
WHERE position = 2 
)   

INSERT INTO tbl_2
SELECT
CTE1.value_2 = IP_1
CTE2.value_2 = IP_2

FROM table_3 er
                LEFT JOIN CTE1 ON CTE1.value_1 = er.value_1 AND CTE1.value_3 = er.value_3
                LEFT JOIN CTE2 ON CTE2.value_1 = er.value_1 AND CTE2.value_3 = er.value_3

我在单独的CTE中计算IP_1和IP-2的值,但我不知道如何在一个CTE上替换两个CTE?或者其他方式。

复制您的代码,这似乎有一些错误:

  • 插入的两列之间没有逗号
  • 值_2不在两个CTE中
可以重构此选项以删除所有CTE:

INSERT INTO 
    tbl_2
SELECT
    t1.value_2 = IP_1
    t2.value_2 = IP_2
FROM 
    table_3 er
    LEFT JOIN tabl_1 t1 ON t1.value_1 = er.value_1 AND t1.value_3 = er.value_3 AND t1.position = 1
    LEFT JOIN tabl_1 t2 ON t2.value_1 = er.value_1 AND t2.value_3 = er.value_3 AND t2.position = 2

将位置放在(1,2)
中,并向ON子句添加条件。这样,您根本不需要CTE,而且可以更快。@jarlh我不完全理解。请你举个例子好吗?@KirillRodeonov这意味着你可以一次选择两个位置,然后在你的
中左键加入CTE1上的CTE1.location=1和[stuff]左键作为CTE2上的CTE2.location=2和[stuff]