在db2中,如何从多个表中删除记录

时间:2017-03-29 22:09:24

标签: sql db2

我一直在尝试通过谷歌搜索找到的许多解决方案,但没有一个与这个看似简单的任务一起工作。

在db2中,我想根据PO供应商和PO日期删除PO和PO行。

PO和PO行由PO编号链接。 (下面不干了)

DELETE FROM po, po_lines 
  WHERE po_lines.po_num = po.po_num
  AND po.vendor = 'AAA' AND po.order_date = CURRENT DATE

TIA!

5 个答案:

答案 0 :(得分:0)

Delete语句仅支持从单个表中删除行。您可以在2个语句中完成相同的操作:

DELETE FROM po_lines WHERE po_num IN
(
   SELECT po.po_num FROM po_lines 
   JOIN po ON po_lines.po_num=po.po_num
   WHERE po.vendor = 'AAA' AND po.order_date = CURRENT DATE
);

DELETE FROM po WHERE po.vendor = 'AAA' AND po.order_date = CURRENT DATE

答案 1 :(得分:0)

我认为不可能在单个DELETE命令中从2个表中删除。可能是您可以使用2个删除语句创建stored procedure并调用存储过程一次。

答案 2 :(得分:0)

没有必要加入,你必须使用2个查询

DELETE FROM po_lines pol 
WHERE EXISTS
(
   SELECT * FROM po
   WHERE pol.po_num=po.po_num AND po.vendor = 'AAA' AND po.order_date = CURRENT DATE
);

DELETE FROM po WHERE po.vendor = 'AAA' AND po.order_date = CURRENT DATE;

答案 3 :(得分:0)

您可以从第一个表中删除行,然后从第二个表中删除行,而第一个表中不再存在关联的列值:

delete from secondtable dt where not exists (select 1 from secondtable st where st.id = dt.id)

答案 4 :(得分:0)

您应该使用with语句使用要删除的行/外键的ID创建一个临时表。

请参阅https://pw999.wordpress.com/2013/08/20/delete-from-multiple-tables-in-db2-in-a-single-query/以获取示例。 (链接指向此处后,Google的第二个结果)