Php MySQL删除超过3个表的连接不';我不能在特定情况下工作
我在MySQL中有3个表,我正在处理以下DELETE语句:Php MySQL删除超过3个表的连接不';我不能在特定情况下工作,php,mysql,join,Php,Mysql,Join,我在MySQL中有3个表,我正在处理以下DELETE语句: DELETE c, b, e FROM category c, block b, element e WHERE c.category_id = 1 AND c.category_template_id = 1 AND b.block_category_id = c.category_id AND e.element_category_id = c.category_id 此DELETE语句工作正常,将
DELETE c, b, e
FROM category c, block b, element e
WHERE
c.category_id = 1 AND
c.category_template_id = 1 AND
b.block_category_id = c.category_id AND
e.element_category_id = c.category_id
此DELETE语句工作正常,将删除id=1的表类别中的数据行以及表块和表元素中相应的数据行
但是,如果table块和/或table元素中没有相应的数据,DELETE语句根本不会删除任何内容(即使category中有一个id=1的数据行)
如何更改声明以涵盖此问题?我搜索了mysql文档、google和stackoverflow将近14个小时。请帮帮我
谢谢你的回答 在如下查询中使用
mysql连接
DELETE c, b, e
FROM category c
LEFT JOIN block b ON c.category_id = b.block_category_id LEFT JOIN element e ON e.element_category_id = c.category_id
WHERE c.category_id = 1 AND c.category_template_id = 1;
这将有助于您使用以下命令更改
块
和元素
的表定义:
ALTER TABLE block
ADD CONSTRAINT fk_block_category
FOREIGN KEY (block_category_id)
REFERENCES category (category_id)
ON DELETE CASCADE
ALTER TABLE element
ADD CONSTRAINT fk_element_category
FOREIGN KEY (element_category_id)
REFERENCES category (category_id)
ON DELETE CASCADE
现在,当您执行以下删除操作时:
DELETE
FROM category
WHERE
category_id = 1 AND
category_template_id = 1;
除了删除匹配的类别
记录外,其他两个表中引用类别
中已删除记录的所有记录也将被删除
请注意,可能有一种方法可以修复当前的delete-join查询。如果您使用MyISAM,这将是您唯一的选择。但是由于您使用的是InnoDB,
上的DELETE CASCADE
可能是更明智的选择。您使用的是MyISAM还是InnoDB?我使用的是InnoDB。您使用和,除非所有条件都满足,否则它不会删除,所以请确保每次即使您的类别模板id为1I,您也需要最后两个条件为真,我建议在删除级联时使用,
,如果这对此次删除有意义,请使用JOIN
而不是在from
中的delete语句中合并所有表。您应该添加一个解释,说明为什么左JOIN
解决了问题(当c
或e
不存在匹配的id
时,没有b
要删除),即左连接
和(内部)连接
的区别。欢迎@myyvee:-)