根据条件将数据从表移动到多个表

时间:2016-08-10 08:52:04

标签: postgresql common-table-expression postgresql-9.4

我正在尝试将数据从一个表移动到另外两个表,具体取决于是否满足某些条件。

这就是我的尝试:

WITH moved_rows AS (
    DELETE FROM rac_temp_import
    WHERE depo IN ('0281752') AND tura IN ('026','094','097')
    RETURNING *, (CASE WHEN parcelno IN(
        SELECT parcelno FROM rac_import
        UNION
        SELECT parcelno FROM rac_dupli
    ) THEN true ELSE false END) AS dupli
)
INSERT INTO rac_dupli
SELECT FROM moved_rows WHERE dupli = true
INSERT INTO rac_import
SELECT FROM moved_row WHERE dupli = false

但据我所知,INSERT之后只能存在一个WITH语句,之后我尝试使用CASE,但这也不起作用。

1 个答案:

答案 0 :(得分:0)

将第一个insert作为CTE:

with moved_rows as (
    delete from rac_temp_import rti
    where depo in ('0281752') and tura in ('026','094','097')
    returning *,
        exists (
            select parcelno
            from rac_import
            where parcelno = rti.parcelno
        ) or
        exists (
            select parcelno
            from rac_dupli
            where parcelno = rti.parcelno
        ) as dupli
), i as (
    insert into rac_dupli
    select
    from moved_rows
    where dupli = true
)
insert into rac_import
select
from moved_rows
where dupli = false

exists可能比case in

更快