@Wan-Derer
Зобанели на Хабре, волки́ ;((

Как написать запрос (устранение "сирот")?

Всем привет! Никак не соображу :(
Есть такая табличка:
62a1ae5ca95c5563585430.png
В ней есть "базовые" записи (у которых) PARENT_ID is null и "дочерние" - у которых PARENT_ID = ID другой записи. Надо исключить из таблицы те записи, у которых PARENT_ID ссылается на несуществующий ID.
Пока сделал промежуточную таблицу с уникальными и не null PARENT_ID. Дальше мысли закончились :) Памагити!
  • Вопрос задан
  • 56 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
DELETE `t1`.*
  FROM `table` AS `t1`
  LEFT JOIN `table` AS `t2` ON `t2`.`id` = `t1`.`parent_id`
  WHERE `t2`.`id` IS NULL
Ответ написан
Комментировать
rozhnev
@rozhnev Куратор тега SQL
Fullstack programmer, DBA, медленно, дорого
-- get records with wrong parents
select * 
from test
where 
	parent_id is not null 
	and not exists (
		select id from test as parents where parents.id = test.parent_id
	);
	
-- delete records with wrong parents
delete test.* 
from test
left join test as parents on parents.id = test.parent_id
where test.parent_id is not null and parents.id is null;

select * from test;

-- add foreign key to prevent missing parents
alter table test add foreign key (parent_id) references test(id);


run SQL online
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы