這裏刪除時,我的問題是簡化版例如不工作:級聯刪除從「分組表」
我創建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中刪除,但不是。
我的問題是現在,我怎麼能從所有表中選擇記錄並刪除結果集?我覺得自己像個假人,因爲我自己無法弄清楚。
從被引用表中刪除而不是從引用表中刪除只有級聯。您可以擁有不屬於任何分組的項目,但是您不允許擁有指向不存在項目的分組。 – Barmar 2014-10-17 05:13:26
如果要在所有分組消失時從其他表中刪除,則需要使用觸發器。 – Barmar 2014-10-17 05:14:05
外鍵的ON DELETE規則與您正在考慮的方式相反。使用指定爲CASCADE的DELETE規則的方式...如果將一行從** table1 **中刪除,那麼**'grouping' **中的相關行將自動刪除。從**'grouping' **中刪除行對**'table1' **中的行沒有影響。 – spencer7593 2014-10-17 05:14:31