sql - 通过一个查询从 3 个表中删除

标签 sql inner-join sql-delete

我有 3 个表,我不想在表中定义任何外键。 我的表结构如下: tables diagram

我写了这个查询:

delete relativedata, crawls, stored
    from relativedata inner join
         crawls
         on relativedata.crawl_id = crawls.id and
            relativedata.id = ? inner join
         stored
         on stored.crawl_id = crawls.id

这个查询对我有用,除非其中一个表没有记录。 现在我该如何在 1 个查询中删除 3 个表?

最佳答案

如果所有表都有记录都有效,请尝试使用 LEFT JOIN 而不是 INNER JOIN。另外,您的连接条件有些困惑。尝试这样:

delete 
    relativedata, crawls, stored
from
    relativedata 
LEFT join crawls on relativedata.crawl_id = crawls.id
LEFT join stored on relativedata.crawl_id = stored.crawl_id
WHERE
    relativedata.id = ? 

此外,外键是件好事,不使用它们通常是个坏主意。是的,他们一开始看起来很烦人,但是当他们烦你的时候,试着集中注意力。大多数时候,当您以不应该的方式干预数据时,它们就会这样做,如果没有它们,您将导致数据库中的数据不一致。

但是,这只是我的意见。

关于sql - 通过一个查询从 3 个表中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34577603/

相关文章:

sql - SQL插入查询的更好方法

mysql - 如何连接同一张表但条件不同的另一张表

mysql删除与其他元素没有链接的元素

php - 我无法从 MySQL 数据库中删除一行

mysql - 包含多个 'Not Like' 的 Where 语句

mysql - 查询中的重复列名

mysql - 运行重新启动的查询

sql - 在 Knex 中为表别名

mysql - 从连接中具有多个 id 的一张表中获取名称

mysql - 为什么我的 `delete where id in` 语句删除表中的所有记录?