Mysql 使用左联接删除数据表
当我需要删除一个表中的数据以及依赖于它的另一个表中的数据时,我不理解MySQL delete 例如,如果我要删除表“factory”中的数据,则表“room”中依赖于表“factory”中数据的所有数据也将被删除 Fac_ID是“工厂”中的主键,是“房间”中的外键 下面是我的SQL代码Mysql 使用左联接删除数据表,mysql,sql,Mysql,Sql,当我需要删除一个表中的数据以及依赖于它的另一个表中的数据时,我不理解MySQL delete 例如,如果我要删除表“factory”中的数据,则表“room”中依赖于表“factory”中数据的所有数据也将被删除 Fac_ID是“工厂”中的主键,是“房间”中的外键 下面是我的SQL代码 DELETE * FROM factory LEFT JOIN room ON room.Fac_ID = factory.Fac_ID WHERE factory.Fac_ID = :Fac_ID 有人能
DELETE * FROM factory
LEFT JOIN room ON room.Fac_ID = factory.Fac_ID
WHERE factory.Fac_ID = :Fac_ID
有人能帮我吗?我想你需要一个单独的删除 首先是删除外来数据
delete from room where Fac_ID = :Fac_ID
然后删除主数据
delete from factory where Fac_ID = :Fac_ID
除非您的表设计(仅在INNODB中受支持),否则您只需删除主数据查询中有一个小错误,我认为您正面临着这个问题
delete from factory where Fac_ID = :Fac_ID
据我所知,主表中有一些记录,参考表中有一些记录。在某些情况下,主表有一些id
,但引用表中没有该id
的条目。为了处理这种情况,您应用了left join
但在您的查询中,您在左侧编写了引用表,所以基本上它是从引用表中获取所有记录,在本例中,这是一种内部连接
因此,要更正此问题,您需要在查询中交换密钥id密码,或者您可以使用右连接
从主表中选择所有记录
DELETE * FROM factory
LEFT JOIN room ON factory.Fac_ID = room.Fac_ID --- here you applied left join
WHERE factory.Fac_ID = :Fac_ID
MySQL允许您同时从多个表中删除行。语法是:
DELETE f, r
FROM factory f LEFT JOIN
room r
ON r.Fac_ID = f.Fac_ID
WHERE f.Fac_ID = :Fac_ID;
但是,最好将其设置为两个表之间的级联删除外键关系。为什么要将
左连接到房间表?它在您当前的查询中没有任何用途LEFT JOIN
将确保获取表factory
的所有行,无论room
表中是否有匹配的行。您的查询似乎很好,其中有什么问题。检查这把小提琴我能知道如何组合它吗?创建一个程序来执行此操作。或者你需要在你的UI上有一个单独的调用。