在DB2 cluase和LIMIT中使用子查询删除MySQL语句

时间:2016-11-22 17:16:36

标签: mysql

我尝试删除与另一个表相关的条件的记录,并且我还想限制将被删除的记录。

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行的“LIMIT 8384”附近使用正确的语法

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

对于我所看到的你可以避免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