2011-09-26 34 views
2

Mysql語法錯誤我不斷收到此刪除錯誤。 Mysql版本是5.0.77。我想不出任何其他問題。我甚至創建了一個臨時表來避免在select中修改表的問題。 :(與任何或在

ERROR 1064(42000):你在你的SQL語法錯誤;檢查對應於你的MySQL服務器版本使用附近的「WHERE e.eid IN (SELECT * FROM 正確的語法手冊(SELECT w.eid FROM」在行3

具有以下刪除

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'工作是自己的嗎?當你嘗試運行兩個'select'時呢? – mwan

+0

是啊,它工作時,我擺脫了最後一次加入。這兩個選擇做 – 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

第一個作品。我正在嘗試使用in或= any來獲得每次eid的匹配。 – user964381

+0

存在的版本不起作用,但第一個爲 – user964381

+0

,如果需要刪除兩個emp,會發生什麼情況?它會選一個嗎?這就是爲什麼我試圖用a = any或者去獲得一個或多個案例 – user964381

相關問題