更新交集表,替代delete-> insert

时间:2011-02-23 16:14:20

标签: mysql sql database intersection

我希望再多一个SQL明智的人可以帮助我。假设下面的表和关系被压缩了。


orders(PK_refno,customer, status)
order_accessories(PK_refno,PK_acc)
accessories(PK_acc,name,desc)

正如您所看到的,这是一个典型的1:*----*:*----*:1方案,问题或我关注的是更新时,因为每个订单所具有的附件都可以修改,这意味着用户可以添加/删除附件。

我认为使用MySQL的唯一方法是删除所有附件,然后插入更新的附件。

我不喜欢这种方式。我认为可能有一种SQL方法可以做到这一点。也许有人可以建议和高级查询(我当然会研究)

我想到的另一种方式是:

  • 检索原件。
  • 比较它们并删除/添加差异。

    我不喜欢这个,因为它可以在应用程序中完成,而不是在数据库中完成。

  • 2 个答案:

    答案 0 :(得分:0)

    我只想补充一点,我首先删除了与要更新的订单匹配的所有记录,然后重新插入新的记录。

    答案 1 :(得分:0)

    我们假设桌子就是这样开始的。

    order_accessories
    PK_refno  PK_acc
    1         73
    1         74
    1         75
    1         86
    1         92
    

    我们还要说75应该是76.假设一个理智的用户界面,用户可以将75更改为76.一个理智的用户界面会将此语句发送到dbms。

    update order_accessories
    set PK_acc = 76
    where (PK_refno = 1 and PK_acc = 75);
    

    如果75首先不应该在那里,那么用户只会删除那一行。一个理智的用户界面会将此语句发送到dbms。

    delete from order_accessories
    where (PK_refno = 1 and PK_acc = 75);