Я использую SQLite и пытаюсь переместить старые строки из таблицы Students to Students_Old и скопировать новые строки из Students_Import.Удаление строк, не существующих в другой таблице с составным первичным ключом
Проблема, у меня есть несколько первичных ключей, как это:
CREATE TABLE "Students" (
`LastName` TEXT NOT NULL,
`FirstName` TEXT NOT NULL,
`BornDate` TEXT NOT NULL,
`Class` TEXT NOT NULL,
`Photo` TEXT,
`ValidUntil` CHAR(10),
PRIMARY KEY(LastName,FirstName,BornDate))
Все таблицы имеют такую структуру (за исключением Students_Import Недостающий Фото и ValidUntil).
До сих пор мне удалось скопировать старые строки с этим:
INSERT INTO Students_Old
SELECT DISTINCT a.LastName, a.FirstName, a.BornDate, a.Class, a.Photo, a.ValidUntil FROM
Students a LEFT JOIN Students_Import b ON a.LastName =b.LastName AND a.FirstName=b.FirstName AND a.BornDate=b.BornDate WHERE b.LastName is NULL;
и добавить новые строки с этим:
INSERT INTO Students
SELECT DISTINCT a.LastName, a.FirstName, a.BornDate, a.Class, "", "" FROM
Students_Import a LEFT JOIN Students b ON a.LastName =b.LastName AND a.FirstName=b.FirstName AND a.BornDate=b.BornDate WHERE b.LastName is NULL
Но я не могу понять, как удалить старые строки в Студентах (которые не существуют в Students_Import).
Я попробовал несколько вариантов этого:
DELETE FROM Students WHERE (LastName, FirstName, BornDate) IN
(SELECT DISTINCT a.LastName, a.FirstName, a.BornDate, a.Class, a.Photo, a.ValidUntil FROM
Students a LEFT JOIN Students_Import b ON a.LastName =b.LastName AND a.FirstName=b.FirstName AND a.BornDate=b.BornDate WHERE b.LastName is NULL);
Но я только получаю синтаксическую ошибку или что я не могу использовать его на несколько строк.
Буду признателен за любую помощь!
Работает как очарование! Вы спасли мне головную боль в другой день (слишком долгое время с тех пор, как я программировал SQL, более 10 лет). Очень понравилось, спасибо! –