我有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个表中删除?
答案 0 :(得分:1)
如果所有表都有记录,如果它有效,请尝试使用INNER JOIN的LEFT JOIN instread。此外,你有一些混乱你加入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 = ?
此外,foregin键是好事,不使用它们通常是个坏主意。是的,他们一开始似乎很讨厌,但是当他们惹恼你的时候,我们会集中注意力。大多数时候,当你以某种方式干预数据时,他们会这样做,你不应该这样做,没有它们你会导致你的数据库中存在不正确的数据。
但是,这只是我的意见。