【问题标题】:Delete from SQLite table with join to link table从 SQLite 表中删除并连接到链接表
【发布时间】:2015-02-05 15:45:15
【问题描述】:

我有这些表:

项目:

+ _id
+ timestamp

项目列表:

+ _id
+ timestamp

链接表:

+ _id
+ item_id foreign key references items(_id)
+ item_list_id foreign key references item_list(_id)

一个项目可以在多个列表中。一个列表可以包含许多项目。这是一个多对多的关系。

我现在想删除一个项目列表及其中的所有项目,如果它们对于该列表是唯一的。但是,如果它们也在另一个列表中,我不想从 items 表中删除任何项目。

我可以检索特定播放列表的所有项目:

items a inner join item_list b on a._id = b.item_id where item_list_id = ?

但我正在努力解决如何为特定列表及其项目构建删除,而不删除也被另一个未删除列表引用的项目。

高度赞赏任何正确方向的指针。

我在 Android 上的 SQLite 上运行它。

【问题讨论】:

  • 如果要删除整个表可以不用dropTable吗?
  • 不是整个表。我想从项目列表中删除一个列表,以及项目表中的所有项目(如果它们仅在该列表中)。如果它们也在另一个列表中,我无法从项目表中删除它们。

标签: android sql sqlite


【解决方案1】:

首先,删除列表:

DELETE FROM itemlists WHERE _id = ?;

然后删除其所有链接:

DELETE FROM linktable WHERE item_list_id = ?;

然后删除所有没有链接的项目:

DELETE FROM items WHERE _id NOT IN (SELECT item_id FROM linktable);

在一个事务中完成所有这些。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多