2011-09-26 6 views
2

Mysql 구문 오류이 삭제와 함께이 오류가 계속 발생합니다. MySQL 버전 5.0.77입니다. 나는 다른 문제를 생각할 수 없다. 나는 심지어 선택에서 테이블을 수정하는 문제를 피하기 위해 임시 테이블을 만들었다. ERROR 1064 :(= any 또는 with

(42000) : 당신은 당신의 SQL 구문에 오류가 있습니다; (IN e.eid이 * FROM 을 선택 WHERE '근처 사용할 수있는 권리 구문에 대한 MySQL 서버 버전에 해당하는 설명서를 확인 (와 라인 3

에서 'FROM 을 w.eid 대해서는 SELECT

DELETE 
FROM emp2 e 
WHERE e.eid IN 
     (SELECT * 
     FROM (SELECT w.eid 
       FROM works2 w, 
         emp2 e2, 
         dept2 d 
       WHERE w.did = d.did 
       AND  d.managerid = e2.eid 
       AND  e.salary > e2.salary 
       ) 
       AS temp1 
     ); 
+0

일치가 수정되었습니다. 미안합니다. 복사 및 붙여 넣기 오류였습니다. 그래도 여전히 오류가 발생합니다. – user964381

+0

내부에서 쿼리를 실행 해 보았습니까? 그것의 가장 중첩 된'select' 작업이 자신의 것입니까? '선택'을 실행하려고하면 어떨까요? – mwan

+0

예, 마지막 결합을 제거하면 작동합니다. 둘 다 do – user964381

답변

1

당신이에서 삭제 된 테이블의 별칭을 잃고 시도 삭제 다음

DELETE FROM emp2 
WHERE eid IN (SELECT ... 
+0

을 고쳤지만 여전히 오류가 발생합니다. 어떤 아이디어? – user964381

0

이 작동 할 수 있습니다

DELETE e 
FROM emp2 e 
    JOIN works2 w 
    ON w.eid = e.eid 
    JOIN dept2 d 
    ON w.did = d.did 
    JOIN emp2 e2 
    ON d.managerid = e2.eid 
WHERE e.salary > e2.salary 

또는 EXISTS 버전 :

DELETE FROM emp2 e 
WHERE EXISTS 
     (SELECT * 
     FROM works2 w, 
       emp2 e2, 
       dept2 d 
     WHERE w.did = d.did 
      AND d.managerid = e2.eid 
      AND e.salary > e2.salary 
      AND w.eid = e.eid 
    ) 
정확히 삭제하려고 무엇

?

+0

첫 번째 작품. 나는 eid와 매치 할 때마다 in 또는 any를 사용하려고 애썼다. – user964381

+0

그러나 존재 버전은 처음에는 – user964381

+0

으로 작동하지 않습니다. 삭제해야 할 두 개의 권한이 있다면 어떻게됩니까? 그냥 하나 골라 줄래? 그게 내가 어쨌든 하나 이상의 사건을 찾으려고 애쓰는 이유 였어. – user964381