MySQL删除子查询中的IN语句和LIMIT
问题描述:
我试图删除记录哪些条件与另一个表有关,我也想限制记录将被删除。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”正确的语法手册,是因为它的条件,我不知道什么是错的。
答
您正在从单一的表,这对于一些原因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
答
什么,我看你能避免如*和你错过别名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
你会得到什么错误? –
您不需要_。* _ on _e。* _(您正在删除行,而不是行中列中的值)。但这不是主要问题 – Kickstart