我有 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 instread of 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 = ?

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

但是,这只是我的意见。

10-07 22:35