2014-10-17 26 views
0

這裏刪除時,我的問題是簡化版例如不工作:級聯刪除從「分組表」

我創建2個表,它們通過「分組表」連接。

CREATE TABLE table1 
(
    t1_pk INT(11) AUTO_INCREMENT NOT NULL, 
    t1_entry VARCHAR(150), 
    PRIMARY KEY (t1_pk) 
) engine = innodb; 

CREATE TABLE table2 
(
    t2_pk int(11) AUTO_INCREMENT NOT NULL, 
    t2_entry VARCHAR(150), 
    PRIMARY KEY (t2_pk) 
) engine = innodb; 

CREATE TABLE grouping 
(
    grouping_pk INT(11) AUTO_INCREMENT NOT NULL, 
    t1_fk INT(11) NOT NULL, 
    t2_fk INT(11) NOT NULL, 
    PRIMARY KEY (grouping_pk), 
    CONSTRAINT table1_fk FOREIGN KEY (t1_fk) REFERENCES table1 (t1_pk) ON DELETE CASCADE ON UPDATE CASCADE, 
    CONSTRAINT table2_fk FOREIGN KEY (t2_fk) REFERENCES table2 (t2_pk) ON DELETE CASCADE ON UPDATE CASCADE 
) engine = innodb; 

現在我想刪除分組,Table 1和Table其中table1.t1_entry是「ABC」的所有條目。

我嘗試做這樣的:

DELETE FROM grouping 
WHERE grouping.grouping_pk IN (SELECT 
    temp.entry_id 
    FROM (SELECT grouping.grouping_pk, 
      grouping.t1_fk, 
      grouping.t2_fk, 
      table1.t1_pk, 
      table1.t1_entry, 
      table2.t2_pk, 
      table2.t2_entry 
      FROM grouping 
       LEFT OUTER JOIN table1 ON grouping.t1_fk = table1.t1_pk 
       LEFT OUTER JOIN table2 ON grouping.t2_fk = table2.t2_pk 
      WHERE table1.t1_entry LIKE 'abc' 
     ) AS temp) 

其結果是,該條目在分組表table1中和表2中刪除,但不是。

我的問題是現在,我怎麼能從所有表中選擇記錄並刪除結果集?我覺得自己像個假人,因爲我自己無法弄清楚。

+1

從被引用表中刪除而不是從引用表中刪除只有級聯。您可以擁有不屬於任何分組的項目,但是您不允許擁有指向不存在項目的分組。 – Barmar 2014-10-17 05:13:26

+0

如果要在所有分組消失時從其他表中刪除,則需要使用觸發器。 – Barmar 2014-10-17 05:14:05

+1

外鍵的ON DELETE規則與您正在考慮的方式相反。使用指定爲CASCADE的DELETE規則的方式...如果將一行從** table1 **中刪除,那麼**'grouping' **中的相關行將自動刪除。從**'grouping' **中刪除行對**'table1' **中的行沒有影響。 – spencer7593 2014-10-17 05:14:31

回答

1

關閉這一個,現在......

結論: 我不得不返工我的數據模型爲較好地解決了我的問題的基礎上,Barmar和Spencer7593意見。 非常感謝幫助!

1

在table2_fk的分組表定義中,您引用了table1而不是table2。這可能是問題...

+0

謝謝 - 這是一個錯誤的例子! – 2014-10-17 09:43:54