Sqlite 从 3 join table 中删除所有连接的行

Sqlite delete all connected rows from 3 join table

如何在 SQLite 中删除从 2 个不同的 table 连接的所有行?

**Table1**         **Table2**                     **Table3**         
| ID | Number |    | ID | Tax | Table1ID |    | ID | Price | Table2ID |
| 1  |   0    |    | 1  | 21  |     1    |    | 1  |   56  |    1     |
| 2  |   1    |    | 2  | 15  |     2    |    | 2  |   5   |    2     |
| 3  |   0    |    | 3  | 10  |     3    |    | 3  |   98  |    3     |

我想从表 1-3 中删除 Table1.Number = 0 的所有行,我怎样才能做到这一点?

您需要的是正确定义表,以便 Table2.Table1ID 引用 Table1.IDTable3.Table2ID 引用 Table2.ID 以及操作 ON DELETE CASCADE:

PRAGMA foreign_keys = ON;

CREATE TABLE Table1(
    `ID` INTEGER PRIMARY KEY, 
    `Number` INTEGER
);

CREATE TABLE Table2(
  `ID` INTEGER PRIMARY KEY,
  `Tax` INTEGER,
  `Table1ID` INTEGER REFERENCES Table1(ID) ON DELETE CASCADE
);

CREATE TABLE Table3(
  `ID` INTEGER PRIMARY KEY,
  `Price` INTEGER,
  `Table2ID` INTEGER REFERENCES Table2(ID) ON DELETE CASCADE
);

请注意,您必须打开外键支持,因为默认情况下它是关闭的。

现在,每次您从 Table1 中删除一行时,Table2 中所有引用 Table1 中已删除行的行也将被删除。
此外,表 3 中所有引用表 2 中已删除行的行都将被删除。

所以你只需要:

DELETE FROM Table1 WHERE Number = 0;

参见demo