/ 1つのクエリで3つのテーブルから削除する - sql、inner-join、sql-delete

1つのクエリで3つのテーブルから削除する - sql、inner-join、sql-delete

私は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にデータの消失を引き起こします。

しかし、それは私の意見です。