2014-10-20 3 views
0

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

Как я могу переписать запрос?

DELETE FROM hr_descr2 
WHERE 
    id IN (SELECT 
     a.id 
    FROM 
     hr_descr2 a, 
     hyperreview_descr b  
    WHERE 
     a.titolo = b.titolo 
     AND a.recensione != b.recensione 
     AND a.recensione != '' 
     AND b.recensione != '' 
     AND ABS(LENGTH(a.recensione) - LENGTH(b.recensione)) > 40); 

Я также попытался переписать запрос таким образом, но это не работает:

WITH temp AS(SELECT 
     a.id 
    FROM 
     hr_descr2 a, 
     hyperreview_descr b  
    WHERE 
     a.titolo = b.titolo 
     AND a.recensione != b.recensione 
     AND a.recensione != '' 
     AND b.recensione != '' 
     AND ABS(LENGTH(a.recensione) - LENGTH(b.recensione)) > 40) 
DELETE FROM hr_descr2 
WHERE 
    id IN (select id from temp); 

ответ

1

вместо этого вы можете использовать

DELETE a FROM 
    hr_descr2 a, 
    hyperreview_descr b  
WHERE 
    a.titolo = b.titolo 
    AND a.recensione != b.recensione 
    AND a.recensione != '' 
    AND b.recensione != '' 
    AND ABS(LENGTH(a.recensione) - LENGTH(b.recensione)) > 40 
1

Во-первых, я не думаю, что MySQL поддерживает КТР, поэтому с не синтаксически верный.

Я не пробовал это, но я думаю, что что-то подобное должно работать?

DELETE hr_descr2 
FROM hr_descr2 a, 
    hyperreview_descr b  
WHERE 
    a.titolo = b.titolo 
    AND a.recensione != b.recensione 
    AND a.recensione != '' 
    AND b.recensione != '' 
    AND ABS(LENGTH(a.recensione) - LENGTH(b.recensione)) > 40); 
+0

Да, он поддерживает их .. и КТР имя специфичны для Microsoft, а также Oracle поддерживает их, но они называют их на другое имя. – Revious

+1

@ Какая версия mysql вы используете? – Dan

+0

5 если я не ошибаюсь .. но CTE работает только с выборами в mysql Я думаю, – Revious

Смежные вопросы