1.使用mysql进行delete from操作时,若子查询的 FROM 字句和更新/删除对象使用同一张表,会出现错误。
mysql> DELETE FROM tab1 WHERE col1 = ( SELECT MAX( col1 ) FROM tab1 );
ERROR 1093 (HY000): You can’t specify target table ‘tab1′ for update in FROM clause
针对“同一张表”这个限制,撇开效率不谈,多数情况下都可以通过多加一层select 别名表来变通解决,像这样
DELETE FROM tab1
WHERE col1 = (
SELECT MAX( col1 )
FROM (
SELECT * FROM tab1
) AS t
);
------------------------------------------------------------------------
2. mysql delete from where in 时后面 的查询语句里不能加where条件
上面三种情况,只有中间的不能执行。
综合起来就是mysql delete from where in 时后面 的查询语句里不能加where条件
---------------------------------------------------------------------------
3. delete from table... 这其中table不能使用别名
Sql代码
delete from student a where a.id in (1,2);(执行失败)
select a.* from student a where a.id in (1,2);(执行成功)
DELETE
FROM
i_subject_schedule
WHERE SUBJECT_SCHEDULE_ID IN (SELECT t.* FROM (SELECT iss.SUBJECT_SCHEDULE_ID FROM
i_subject_schedule iss
JOIN
i_grade_subject_teacher igst ON iss.GRADE_SUBJECT_TEACHER_ID = igst.GRADE_SUBJECT_TEACHER_ID
JOIN
i_grade_subject igs ON igst.GRADE_SUBJECT_ID = igs.GRADE_SUBJECT_ID
JOIN
t_gradeinfo tg ON tg.GRADEINFO_ID = igs.GRADEINFO_ID
WHERE
tg.GRADEINFO_ID='3f45f9d0-352a-11e2-ba74-0050569f303b'
AND iss.SEMESTERINFO_ID='49') AS t);