【发布时间】:2010-06-18 03:13:25
【问题描述】:
我正在使用 SQLite,
TABLE A
(
ID
FileNAME
FOLDERID
)
TABLE B
(
FOLDERID
FOLDERPATH
)
我想写一条 SQL 语句来删除 A 中的所有文件,它的文件夹是 C:\ABC\ 的子文件夹;
如何在一条 SQLite 语句中实现它,这是最好的方法吗?
非常感谢!
【问题讨论】:
标签: sql sqlite sql-update
我正在使用 SQLite,
TABLE A
(
ID
FileNAME
FOLDERID
)
TABLE B
(
FOLDERID
FOLDERPATH
)
我想写一条 SQL 语句来删除 A 中的所有文件,它的文件夹是 C:\ABC\ 的子文件夹;
如何在一条 SQLite 语句中实现它,这是最好的方法吗?
非常感谢!
【问题讨论】:
标签: sql sqlite sql-update
以下工作正常:
create table table_a (
id int,
file_name varchar(300),
folder_id int
);
create table table_b (
folder_id int,
folder_path varchar(300)
);
insert into table_a (id, file_name, folder_id) values (1, 'file1.txt', 1);
insert into table_a (id, file_name, folder_id) values (1, 'file2.txt', 1);
insert into table_a (id, file_name, folder_id) values (1, 'file2-1.txt', 2);
insert into table_b (folder_id, folder_path) values (1, 'c:\abc\somefolder\another');
insert into table_b (folder_id, folder_path) values (2, 'c:\abcNOT\somefolder\another');
delete
from table_a
where folder_id in (select folder_id from table_b where substr(folder_path, 1, 7) = 'c:\abc\');
select * from table_a;
【讨论】:
相同的想法,但有一些修改: SQLite 现在可以识别参照完整性了:
创建表 Table_a ( id int, 文件名 varchar(300), folder_id 整数, FOREIGN KEY(folder_id) REFERENCES Table_b (folder_id) );
创建表 Table_b ( folder_id 整数, 文件夹路径 varchar(300) );
CREATE TABLE Table_b (folder_id, folder_path) VALUES (1, 'c:\abc\somefolder\another'); CREATE TABLE Table_b (folder_id, folder_path) VALUES (2, 'c:\abcNOT\somefolder\another'); CREATE TABLE Table_a (id, file_name, folder_id) VALUES (1, 'file1.txt', 1); CREATE TABLE Table_a (id, file_name, folder_id) VALUES (1, 'file2.txt', 1); CREATE TABLE Table_a (id, file_name, folder_id) VALUES (1, 'file2-1.txt', 2);
删除 从表_a WHERE folder_id IN (SELECT folder_id FROM Table_b WHERE folder_path LIKE 'c:\abc\%');
SELECT * FROM Table_a;
【讨论】: