MySQL 在 IN 子句和 LIMIT 中删除带有子查询的语句

MySQL delete statement with subquery in IN cluase and LIMIT

我试图删除与另一个条件相关的记录 table,我还想限制将被删除的记录。

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 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'LIMIT 8384' at line 17

我想知道这是因为它的条件,我不知道出了什么问题。

据我所知,您可以避免使用 e.* 并且您错过了别名 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

您正在从单个 table 中删除,出于某种原因 MySQL 不支持 table 别名:-

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