2015-07-07 3 views
1

Мне нужно удалить результаты в этом запросе:УДАЛИТЬ С SELECT (ОШИБКА 1093)

SELECT a.cad_id 
FROM `Cad` a 
WHERE NOT EXISTS 
(
SELECT b.cad_id 
FROM `rel` b 
WHERE a.cad_id = b.rel 
) 

Стараюсь:

DELETE FROM `Cad` WHERE cad_id = (
SELECT a.cad_id 
FROM `Cad` a 
WHERE NOT EXISTS 
(
SELECT b.cad_id 
FROM `rel` b 
WHERE a.cad_id = b.rel 
) 
) 

1093 - Вы не можете указать целевую таблицу 'Cad' для update in FROM

Как это можно решить?

ответ

0

Выберите данные внутреннего запроса во временной таблице.

DELETE FROM `cad` 
WHERE cad_id IN (SELECT * 
       FROM (SELECT a.cad_id 
         FROM `cad` a 
         WHERE NOT EXISTS (SELECT b.cad_id 
              FROM `rel` b 
              WHERE a.cad_id = b.rel)) AS 
         tempTable) 
+0

Я получаю эту ошибку: # 1242 - подзапрос возвращает более чем на 1 строку – Danilo

+1

Вы использовали неправильный 'Where' обусловливать его' DELETE FROM WHERE хама cad_id = '. Используйте 'IN' вместо' = ' –