2016-05-16 8 views
1

2つのテーブルから行を削除しようとする、初心者のビット。エイリアスの仕方がわからない - 私の問題と思われる - どんな援助も役に立つだろう!内部結合による削除時のMySQLエラー(1066非固有ID)

DELETE emails, emails_bodies 
FROM emails, emails_bodies 
INNER JOIN emails_bodies ON emails_bodies.email_id = emails.id 
WHERE 
emails.date_modified < "2013-01-01" 

で失敗:あなたは

INNER JOIN emails_bodies as emails_bodies_joined 

、代わりの場所をすべての場所でemails_bodies使用emails_bodies_joinedユニークなテーブル名を維持するためにasを使用する必要が同じテーブルに入社して以来

1066: Not unique table/alias: 'emails_bodies' 

答えて

1

DELETEクエリにemails_bodiesというテーブルへの参照が追加されています。これを試してみてください:

DELETE emails.* 
FROM emails 
INNER JOIN emails_bodies ON emails_bodies.email_id = emails.id 
WHERE emails.date_modified < "2013-01-01" 

また、選択リストから1つのテーブルを削除しました。これは、1つのクエリで2つの異なるテーブルから削除されないためです。これを実現する1つの選択肢は、親テーブル(例えばemails)と子テーブル(例えばemails_bodies)との間にカスケードを設定することである。 emailsのレコードを削除すると、emails_bodiesの外部キー参照が自動的に削除されます。それぞれ独自のエイリアスを与えることなく、

DELETE emails, emails_bodies 
FROM emails 
INNER JOIN emails_bodies -- cross join, since no ON condition given 
INNER JOIN emails_bodies ON emails_bodies.email_id = emails.id 
WHERE emails.date_modified < "2013-01-01" 

あなたは二度同じテーブル名を使用していた。

あなたが Not unique table/aliasエラーを取得している理由として、MySQLは次の線に沿って何かとしてあなたのクエリを解釈します。

+0

大きな説明。あなたのソリューションは両方のテーブルか単に「電子メール」から行を削除しますか? – David

+0

@David私はあなたが選んだリストに気付かなかったことを伝えるために急いでいました。それをしないでください。両方のテーブルから一度に削除する必要がある場合は、外部キーでカスケード削除を使用します。 –

+0

カスケードする方法がわからないので、2つの削除クエリを実行します。 – David

0

あなたの結合されたテーブルが必要です

関連する問題