我尝试删除与另一个表相关的条件的记录,并且我还想限制将被删除的记录。
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”附近使用正确的语法
我想知道这是因为它的状况,我不知道出了什么问题。
答案 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