我正在尝试将数据从一个表移动到另外两个表,具体取决于是否满足某些条件。
这就是我的尝试:
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
,但这也不起作用。
答案 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