Mysql 使用左联接删除数据表

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 有人能

当我需要删除一个表中的数据以及依赖于它的另一个表中的数据时,我不理解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 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上有一个单独的调用。