这是我的问题的简要示例:
我创建了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;
现在我要删除分组,table1和table2中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和table2中删除。
我现在的问题是,我如何选择记录并从所有表中删除结果集?我觉得自己像个假人,因为我不能自己解决这个问题。
答案 0 :(得分:1)
在table2_fk的分组表定义中,引用table1而不是table2。可能是问题......
答案 1 :(得分:1)
现在关闭这个...
结论: 基于Barmar和Spencer 7593评论,我必须重新设计我的数据模型,以便更好地解决我的问题。 非常感谢您的帮助!