Удаление сирот из таблицы - PullRequest
4 голосов
/ 03 июля 2011

Я пытаюсь почистить стол, на котором довольно много осиротевших предметов.

Я подхожу к этому, проверяя, есть ли связь с другой таблицей, ища нулевые значения.

   DELETE FROM table1 
LEFT JOIN table2 ON table1.ID = table2.ID
    WHERE table2.ID IS NULL

Я получаю сообщение об ошибке, что левое внешнее соединение недопустимо.

Я ищу предложения о том, как удалить этих сирот из разорванных отношений

Ответы [ 3 ]

21 голосов
/ 04 июля 2011

Если вы хотите использовать тот же синтаксис, вот как это могло бы быть:

DELETE a 
FROM table1 a  
LEFT JOIN table2 b 
ON a.id = b.id 
WHERE b.id IS NULL 
12 голосов
/ 03 июля 2011

попробуйте это:

DELETE  FROM        table1
WHERE NOT EXISTS (SELECT NULL FROM table2 WHERE table1.ID = table2.ID)
0 голосов
/ 16 февраля 2016

Таблица 1 должна быть дочерней таблицей, содержащей потерянные записи. И Таблица 2 родительская таблица.

    DELETE ChildTable  
    FROM Table1 ChildTable    
    LEFT JOIN Table2 ParentTable 
    ON ChildTable.id = ParentTable.id 
    WHERE ParentTable.id IS NULL 

Действительно полезная статья. СОЕДИНЕНИЯ SQL упрощают поиск и исправление отсутствующих данных

...