Mysql删除不在其他表中的行

时间:2011-09-27 11:01:30

标签: mysql

我知道这是可能的,但是当您需要引用要删除的行时则不行。例如:

select * from `dvd_role` r
left join `dvd_actor2role` a on a.`roleId` = r.id
where a.roleId is null;

这会产生dvd_actor2role表中不存在的违规行,我想删除。但我无法在子查询中使用dvd_role表,或者我收到错误,但我需要该表才能确定要删除的行。

SQL中是否有解决方法?

感谢。

1 个答案:

答案 0 :(得分:0)

左边连接并在“右肢”检查为空这些天似乎是一种病态。请改用NOT EXISTS。

SELECT *
FROM dvd_role r
WHERE NOT EXISTS (
   SELECT * FROM dvd_actor_role a
   WHERE a.roleId = r.id
   );

如果一切正常,请用DELETE替换第一个“select *”。