【问题标题】:DELETE FROM table WHERE condition in other table is metDELETE FROM table WHERE 满足其他表中的条件
【发布时间】:2017-08-06 03:05:22
【问题描述】:

我是 SQL 新手,因此感谢您的帮助,如果这很简单,请您原谅,我在其他相关帖子中找不到对我有帮助的答案。

我必须表PRC_FIXIM_ITEM。他们都有一个专栏ITEM_NO。我想删除PRC_FIX 中的一行,其中IM_ITEM.ITEM_VEND_NO 等于TOYM

我需要进行某种联接吗?再次感谢您的帮助。

编辑:我不需要帮助设置级联删除。我在问当IM_ITEM 中的匹配行满足特定条件时,如何从仅PRC_FIX 中删除一行。

【问题讨论】:

  • 我的答案中的脚本会根据需要删除 PRC_FIX。试试看,让我知道结果。

标签: mysql sql


【解决方案1】:

正确的做法是设置级联删除外键约束。

首先,删除不存在的:

delete f from prc_fix f
    where not exists (select 1 from im_item i where i.item_no = f.item_no);

然后,从im_item 中删除行时自动删除行:

alter table prc_fix add constraint fk_prc_fix_item_no
    foreign key (im_item) references im_item(item_no) on delete cascade;

【讨论】:

  • 当它们从 IM_ITEM 中删除时,它们已经设置为从 PRC_FIX 中删除。我希望仅在满足特定条件时从 PRC_FIX 中删除
【解决方案2】:
DELETE FROM PRC_FIX  
WHERE ITEM_NO=
(SELECT ITEM_NO FROM IM_ITEM WHERE ITEM_VEND_NO='TOYM')

【讨论】:

    【解决方案3】:

    巧妙的方法:

    DELETE PRC_FIX
    FROM PRC_FIX
    INNER JOIN IM_ITEM ON IM_ITEM.ITEM_NO = PRC_FIX.ITEM_NO 
               AND IM_ITEM.ITEM_VEND_NO = 'TOYM'
    

    希望对你有所帮助:)

    【讨论】:

    • 我会试试这个。谢谢
    • 做到了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-08-15
    • 2012-08-08
    • 2010-12-31
    • 1970-01-01
    • 2017-02-25
    • 2012-06-23
    • 1970-01-01
    • 2021-09-15
    相关资源
    最近更新 更多