MySQL:删除在另一个select中具有值的行

时间:2016-01-15 19:43:42

标签: mysql

我正在尝试根据其中一个键中的内容删除表中的行(之前的程序员没有确保如果某个键缺失则不会删除值,yada yada)这就是声明我试过了:

DELETE FROM studentinstruments 
WHERE studentID IN 
(SELECT DISTINCT studentID 
FROM studentinstruments 
WHERE studentID NOT IN 
(SELECT ID FROM students));

我收到错误“ERROR 1093(HY000):您无法在FROM子句中指定目标表'studentinstruments'进行更新”,我不知道它有什么问题。将此声明用于修正会有什么作用?

2 个答案:

答案 0 :(得分:1)

为什么不直接使用它而不是使用多个子查询,它会做同样的事情。

DELETE FROM studentinstruments 
WHERE studentID NOT IN 
(SELECT ID FROM students);

答案 1 :(得分:0)

问题在于Mysql,您无法在选择部分中使用的同一个表中进行修改。

而是尝试使用该实例。

DELETE FROM studentinstruments
WHERE studentID IN
(
    SELECT studentId
    FROM (SELECT * FROM studentinstruments) AS something
    WHERE something.studentID NOT IN (SELECT * FROM studentinstruments)
)