2014-10-20 2 views
0

MySQL에서이 쿼리를 실행하는 동안 오류가 발생합니다. MySQL은 JOIN의 결과 집합을 사용하여 일부 레코드를 삭제하려고합니다. 같은 테이블.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은 CTE를 지원 생각하지 않는다, 그래서와 구문이 아니다 옳은.

나는 이것을 시도하지는 않았지만 이런 식으로 작동해야한다고 생각합니까?

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

예, 그들을 지원 사용할 수 있으며 CTE가 마이크로 소프트에 고유 한 이름이며, 또한 오라클을 지원하지만 그들은 다른 이름으로 그들에게 전화. – Revious

+1

@ 이전 버전에서 실행중인 mysql의 버전은 무엇입니까? – Dan

+0

만약 내가 틀렸어도 ..하지만 CTE가 mysql에서 선택으로 만 작동한다고 생각해. – Revious

관련 문제