如何解决SQLite从3联接表中删除所有连接的行
如何删除SQLite中2个不同表连接的所有行?
**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 |
我想从Table1-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
);
请注意,您必须打开外键支持,因为默认情况下它是关闭的。
现在,每次您从表1中删除一行时,对表1的已删除行进行引用的表2的所有行也将被删除。
同样,引用到Table2的已删除行的Table3的所有行也将被删除。
因此,您所需要做的就是:
DELETE FROM Table1 WHERE Number = 0;
请参见demo。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。