Как написать операцию обновления SQLite в двух таблицах? - PullRequest
0 голосов
/ 18 июня 2010

Я использую SQLite,

TABLE A
(
 ID
 FileNAME
 FOLDERID
)

TABLE B
(
 FOLDERID
 FOLDERPATH
)

Я хочу написать инструкцию SQL для удаления всех файлов в A, где его папка является подпапкой C: \ ABC \;

Как можноЯ делаю это в одном выражении SQLite, и это лучший способ сделать?

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 18 июня 2010

отлично работает следующее:

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;
0 голосов
/ 02 июля 2010

Та же идея, но с некоторыми изменениями: SQLite теперь распознает ссылочную целостность:

CREATE TABLE Table_a (id int, имя_файла varchar (300), folder_id int, FOREIGN KEY (folder_id) REFERENCES Table_b (folder_id));

CREATE TABLE Table_b (folder_id int, folder_path varchar (300));

CREATE TABLE Table_b (folder_id, folder_path) ЗНАЧЕНИЯ (1, 'c: \ abc \ somefolder \ another');CREATE TABLE Table_b (folder_id, folder_path) VALUES (2, 'c: \ abcNOT \ somefolder \ another');CREATE TABLE Table_a (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, имя_файла, folder_id) ЗНАЧЕНИЯ (1, 'file2-1.txt', 2);

УДАЛИТЬ ИЗ Table_a ГДЕ folder_id IN (ВЫБРАТЬ folder_id ИЗ Table_b WHERE folder_path LIKE 'c: \ abc\% ');

SELECT * FROM Table_a;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...