【问题标题】:How can I delete rows from multiple tables with multiple foreign keys?如何从具有多个外键的多个表中删除行?
【发布时间】:2019-10-10 00:19:25
【问题描述】:

我有 4 个不同的表,我希望用户使用 klantid 删除 4 个不同表中的一行。 这是我的桌子

  1. Customer 具有customeridname

  2. Customercard 具有Cardidcustomerid(FK)

  3. booking 具有bookingidcustomerid

  4. bookingroom 拥有bookingid

我可以从 3 个表格中删除并填写“客户 ID”,但我还必须删除预订房间中的行/行。如何为我的数据库删除它?

我在 Stack Overflow 上进行了搜索,但所有答案都是针对影响更多表的单个 FK。我有 2 个不同的 FK '''(Customerid 和 Bookingid)'''

【问题讨论】:

    标签: sql foreign-keys key multiple-columns sql-delete


    【解决方案1】:

    您必须选择客户的 bookingId。我不确切知道您的问题,但您似乎只想删除分配客户的这 4 个表的所有内容。

    所以你有你的 customerId = XXX:

    DELETE FROM bookingroom WHERE bockingid IN (SELECT b.id FROM booking b WHERE customerid = XXX);
    

    在此之后,您可以使用WHERE customerId = XXX从其他 3 个表中删除


    编辑: 如果要删除客户,则必须至少删除引用该客户的所有行。那是Customercardbooking

    如果你想同时删除所有预订的预订房间,引用客户,你可以使用上面的语句。

    然后您可以删除客户的预订:

    DELETE FROM booking WHERE customerid = XXX;
    

    删除客户的客户卡:

    DELETE FROM Customercard where customerid = XXX;
    

    然后你可以删除客户(如果他没有被其他表分配):

    DELETE FROM Customer WHERE customerid = XXX;
    

    【讨论】:

    • 感谢您的回复,不,我想删除一个客户,但我必须删除所有使用客户 ID 的预订,以及所有使用客户 ID 的预订 ID。
    • 查看我的编辑。如果您只删除客户的所有预订、客户卡,您可以通过 customerId 执行此操作。如果您还想删除客户所有预订的bookingrooms,您可以在删除预订等之前使用上面的查询。
    • 不客气。提示:点击绿色按钮接受答案(也在您的其他帖子中),让未来的用户知道哪个答案解决了问题。;)
    猜你喜欢
    • 2013-03-02
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 2015-12-08
    • 2010-09-06
    相关资源
    最近更新 更多