2015-10-14 95 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