2015-10-14 96 views
0

我相信我的问题可以被称为another question几乎相同的标题,但答案不幸的是我不够清楚,这个问题也是6岁,也许已经有一些改变MySQL 。MySQL错误1443解决方法

我想从表中删除一行,甚至没有更新/插入/删除视图表中的行,据我所知,不幸的是,我们不允许我们更改引用视图的表表。 我需要引用其使我进入选项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' 的定义防止操作删除表'学生'。

+2

“删除表中的行(或多个),甚至没有更新/插入/从视图表删除行”的观点不表,你不能保持一个记录在一个视图,同时消除它从基础表。 – Uueerdo

+0

@Uueerdo我想要更改的行不被我引用的viewtables使用。例如我只想移除不在视图中的学生。所以我的查询不会直接或间接地改变视图表。 – wsssixteen

回答

2

显然,您的视图必须包含要从中删除的表格。这表明外部联接:

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; 
+0

如果这是一个有效的问题,你可以添加到答案_为什么它可以与JOINS一起使用,但不会与EXISTS一起使用?_因为最后,我只是引用视图表。 – wsssixteen

+0

@wsssixteen。 。 。这是MySQL的限制。您不能在语句中引用要删除(或更新)的表。显然,对于视图以及直接在查询中也是如此。 –

+0

啊,好吧,原谅我的无知 – wsssixteen