我写了
DELETE FROM emp
WHERE
hiredate < (
SELECT
m.hiredate
FROM
emp e,
emp m
WHERE
e.mgr = m.empno
)
但这显示只有3行被删除 注意:我使用了demosql表,该表具有空表,部门,薪水表和奖金表。请帮我解决这个问题。谢谢。
答案 0 :(得分:1)
您在查询中犯了这些错误:
<
而不是>
-我给您带来的好处是,它是
错字。外部查询和子查询之间没有关系,因此即使您修复了上述问题,它仍然会 最后删除所有雇用日期为>全部 经理的聘用日期。
使用旧的隐式联接语法(a,b)代替ANSI标准JOIN
语法
您的查询删除所有雇用日期大于其经理的雇员 应该看起来更像
DELETE FROM emp e1
WHERE hiredate > (SELECT m.hiredate
FROM emp e2
JOIN emp m
ON e2.mgr = m.empno
AND e2.empno = e1.empno);
要验证此方法是否正常运行,请在运行删除操作之前和之后使用此查询。
SELECT
m.hiredate,
e.hiredate
FROM
emp e
JOIN emp m ON e.mgr = m.empno
WHERE
e.hiredate > m.hiredate;
要清楚地了解这些功能是如何工作的,请阅读一些有关子查询和联接的信息。