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.ID
和 Table3.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。
如何在 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.ID
和 Table3.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。