简体   繁体   中英

Replace 2 CTEs to one

I have following code on 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

I calculate value for IP_1, IP-2 in separate CTE, but I haven't idea how I can replace 2 CTE's on one? Or some other way.

Copying your code, which seems to have a number of errors:

  • no comma between the two columns being inserted;
  • value_2 isn't in either of your CTEs.

This can be refactored to remove all CTEs:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM