sql – 将数据修改CTE中的INSERT语句与CASE表达式相结合
发布时间:2020-12-12 06:23:09 所属栏目:MsSql教程 来源:网络整理
导读:我的问题是Erwin Brandstetter在 this thread关于正确使用WITH的优秀答案的某种扩展. 我的旧查询如下所示: WITH x AS ( INSERT INTO d (dm_id) SELECT dm_id FROM dm,import i WHERE dm.dm_name = i.dm_name RETURNING d_id),y AS ( INSERT INTO z (d_id) SE
我的问题是Erwin Brandstetter在
this thread关于正确使用WITH的优秀答案的某种扩展.
我的旧查询如下所示: WITH x AS ( INSERT INTO d (dm_id) SELECT dm_id FROM dm,import i WHERE dm.dm_name = i.dm_name RETURNING d_id ),y AS ( INSERT INTO z (d_id) SELECT d_id FROM x RETURNING z_id ) INSERT INTO port (z_id) SELECT z_id FROM y; 这就像一个魅力.但是现在,添加了另一个表(r)(与表d相同的结构),并且有可能必须将d_id或r_id添加到表z.这取决于表导入中dm_name或rm_name是否为空.所以我的理论方法是这样的: SELECT dm_name,rm_name,CASE WHEN dm_name != '' THEN WITH x AS ( INSERT INTO d (dm_id) SELECT dm_id FROM dm,import i WHERE dm.dm_name = i.dm_name RETURNING d_id ),y AS ( INSERT INTO z (d_id) SELECT d_id FROM x RETURNING z_id ) INSERT INTO port (z_id) SELECT z_id FROM y END,CASE WHEN rm_name != '' THEN WITH x AS ( INSERT INTO r (rm_id) SELECT rm_id FROM rm,import i WHERE rm.rm_name = i.rm_name RETURNING r_id ),y AS ( INSERT INTO z (r_id) SELECT r_id FROM x RETURNING z_id ) INSERT INTO port (z_id) SELECT z_id FROM y END FROM import; 但是PostgreSQL告诉我:
虽然查询的那部分应该是正确的,因为它已经有效. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |