2016-11-22 60 views
1

我試圖刪除記錄哪些條件與另一個表有關,我也想限制記錄將被刪除。MySQL刪除子查詢中的IN語句和LIMIT

DELETE e.* FROM employees e 
WHERE emp_no IN (
    SELECT ee.emp_no 
    FROM (
     SELECT e.emp_no 
     FROM employees e, salaries s 
     WHERE e.emp_no = s.emp_no 
     GROUP BY e.emp_no 
     HAVING COUNT(s.emp_no) = 1) 
    ee) 
AND emp_no NOT IN (
    SELECT dmm.emp_no 
    FROM (
     SELECT dm.emp_no 
     FROM dept_manager dm) 
    dmm) 
LIMIT 8384 

,但我得到一個錯誤

1064 - 你在你的SQL語法錯誤;檢查對應於您MariaDB的服務器版本在17行

不知是用接近「極限8384」正確的語法手冊,是因爲它的條件,我不知道什麼是錯的。

+0

你會得到什麼錯誤? –

+0

您不需要_。* _ on _e。* _(您正在刪除行,而不是行中列中的值)。但這不是主要問題 – Kickstart

回答

1

您正在從單一的表,這對於一些原因MySQL不支持表別名刪除: -

DELETE 
FROM employees 
WHERE emp_no IN (
    SELECT ee.emp_no 
    FROM (
     SELECT e.emp_no 
     FROM employees e, salaries s 
     WHERE e.emp_no = s.emp_no 
     GROUP BY e.emp_no 
     HAVING COUNT(s.emp_no) = 1) 
    ee) 
AND emp_no NOT IN (
    SELECT dmm.emp_no 
    FROM (
     SELECT dm.emp_no 
     FROM dept_manager dm) 
    dmm) 
LIMIT 8384 
+0

謝謝,它真的很奇怪。 – witoong623

0

什麼,我看你能避免如*和你錯過別名e.emp

DELETE FROM employees e 
WHERE e.emp_no IN (
    SELECT ee.emp_no 
    FROM (
     SELECT e.emp_no 
     FROM employees e, salaries s 
     WHERE e.emp_no = s.emp_no 
     GROUP BY e.emp_no 
     HAVING COUNT(s.emp_no) = 1) 
    ee ) 
AND e.emp_no NOT IN (
    SELECT dmm.emp_no 
    FROM (
     SELECT dm.emp_no 
     FROM dept_manager dm) 
    dmm) 
LIMIT 8384