Sql 将2个CTE更换为1个
我在postgresql上有以下代码: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
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中
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]