使用一个查询从 3 个表中删除

delete from 3 tables with one query

我有 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。另外,您的加入 ON 条件有些混乱。像这样尝试:

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 = ? 

此外,外键是个好东西,不使用它们通常是个坏主意。是的,他们一开始似乎很烦人,但请试着专注于他们何时惹恼您。大多数时候,当您以不应该的方式干预数据时,他们会这样做,如果没有他们,您会导致数据库中的数据不一致。

但是,这只是我的意见。