2009-04-11 111 views
1

說,我有兩個表課程和faculty_courses - 每個都有一個主鍵course_ID是varchar(50)非空。SQl從多個表中刪除

我想從課程表中刪除一行 - 因此假設必須從兩個表中刪除該行,因爲它們是通過關係鏈接的。

我寫了這一點 - 不工作 - 說的關鍵字附近有語法錯誤 '加入'

DELETE FROM JOIN課程ON faculty_courses = Courses.course_ID faculty_courses.course_ID WHERE faculty_courses.course_ID = 'ITM731'

有沒有想法?

回答

6

您必須發出兩條語句。

DELETE Courses where course_ID = 'ITM731' 
DELETE faculty_courses WHERE course_ID = 'ITM731' 

或者,如此處所述,使用刪除級聯。

+1

我通常建議使用這種方法,而不是級聯刪除。隨着意圖的變化,這一點更加明顯。 – JoshBerke 2009-04-11 12:53:37

+0

對評論Josh的+1 +1 – 2009-04-11 13:03:34

2

想要的東西可以通過在表格之間建立ON DELETE CASCADE鏈接來處理。 只要您的RDBMS允許這樣做。

0

DELETE只從一個表中刪除記錄 - JOIN語法僅用於在該表上選擇正確的行,例如,在具有1:n關係的表上(不是您在此處具有的)並且您想要刪除所有來自「n」表的與「1」表上的可選記錄相關的記錄,那麼你會做DELETE FROM ntable INNER JOIN reftable ON ntable.ref = reftable.ref WHERE reftable.column = 'whatyouneedtolookup'

正如我所說的,這與您目前的情況無關,在這種情況下,您只需發出兩條DELETE語句 - 每個表對應一個關鍵字。這就是說,這聽起來像你有一個1:1引用表之間,我覺得奇怪 - 通常與那種引用,平凡的規範化將合併成一個單獨的表與列來自兩個表格。

+0

1:1關係在分類實體的情況下可以是有效的。在這種情況下,儘管我認爲他可能會錯誤地提到PK是兩個表中的一列。也許faculty_courses是包含course_id的組合鍵? – 2009-04-11 13:02:55

-2
alter table tablename drop column columnname