我相信我的问题可以与标题几乎相同的另一个问题有关,但是不幸的是,答案对我来说还不够清楚,而且这个问题也已有6年历史了,也许对MySQL已有一些更改。
我想从表中删除行,甚至不从视图表中更新/插入/删除行,据我所知,不幸的是,mysql阻止了我们对引用视图表的表进行更改。我 需要 参考表格,该表格将我带到选项2和我的问题:
我如何“ 将列表转储到临时表中并将其用于子查询” 。还是 有一种变通办法使此代码正常工作 ?
我正在使用MySQL版本5.6.12和我正在处理的代码:
DELETE FROM student WHERE (SUBSTR(student.stud_no,1,4) = 1234) AND NOT EXISTS (SELECT vr.stud_no FROM viewroom vr WHERE vr.stud_no = student.stud_no) AND NOT EXISTS (SELECT vlnr.stud_no,vlnr.status FROM viewlateststudentnr vlnr WHERE (student.stud_no = vlnr.stud_no) AND (vlnr.status = 'confirmed') )
和错误:
1443-表’vr’的定义阻止了对表’student’的删除操作。
显然,您的视图必须包含要从中删除的表。这表明外部联接:
DELETE s FROM student s LEFT JOIN viewroom vr ON vr.stud_no = s.stud_no LEFT JOIN viewlateststudentnr vlnr ON s.stud_no = vlnr.stud_no AND vlnr.status = 'confirmed' WHERE SUBSTR(s.stud_no, 1, 4) = 1234 AND vr.stud_no IS NULL AND vlnr.stud_no IS NULL;