私は3つのテーブルを持っていると私はテーブル内の任意の外部キーを定義する必要はありません。 私のテーブルの構造は以下の通りです: テーブル図
私はこの質問を書いた:
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つのテーブルでこの削除を行うことができますか?
回答:
回答№1は0すべてのテーブルにレコードがある場合に機能する場合は、INNER JOINのLEFT 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のキーは良いもので、使用していないそれらは一般的に悪い考えです。はい、彼らは最初は迷惑なようですが、彼らがあなたを困らせるときに集中しようとします。たいていの場合、あなたはあなたがしてはならない方法でデータに干渉しているときにそれを行います。それがなければ、あなたのDBにデータの消失を引き起こします。
しかし、それは私の意見です。