2016-11-22 59 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