1

私は2つのテーブルを持っています。peoplesある人が別の人を呼んだaddresses。テーブルにpeoples外部制約がありaddressます ( peoples.address_id = addresses.address_id) 複数の人が同じアドレスを持つ可能性があります。表のaddress列にユニーク制約がありますaddresses

同じ住所を持つ他のレコードがテーブルにない場合に限り、テーブルから人を削除し、peoplesテーブルの関連するアドレスを削除する必要がある状況に遭遇しました。addressespeoples

MySQLでこれを行うにはどうすればよいですか?

4

2 に答える 2

3

NOT EXISTS以下のような句を使用できます

DELETE FROM addresses 
WHERE NOT EXISTS 
(SELECT * FROM peoples WHERE peoples.address_id=addresses.address_id)

これに対する短所は、存在するすべての住所行に対してクエリを再実行するため、かなり遅くなることです。それ以外の場合は、問題を解決する必要があります。

まずその人を削除してください。次に、アドレスに人がいない場合、このクエリは削除します

于 2013-11-13T02:46:02.303 に答える
3

これは、サブクエリを実行するよりもパフォーマンスが向上するはずです。

DELETE
    addresses
FROM
    addresses
    LEFT JOIN peoples
        ON addresses.address_id = peoples.address_id
WHERE
    peoples.address_id IS NULL

テーブルで参照されていないすべてのアドレスを削除する必要がありpeoplesます。問題の特定のアドレスのみを削除したい場合は、WHERE句に次のようなものを追加しAND addresses.address_id = '<address_id>'ます。

于 2013-11-13T02:52:07.003 に答える