2017-10-26 3 views
0

私はusersテーブルを持っており、1人以上のユーザが関連する可能性があります。私はデータベースにreferredと呼ばれる列を持っていて、そのIDにIDがある場合、そのIDがデータベースから削除されると、関連付けられたユーザーも移動する必要があります。私はid='1'を持つユーザーJosh Murrayreferred='1'も削除しなければならない基準に一致する人を削除した場合mysqlクエリを選択して削除する

START TRANSACTION; 
DELETE FROM users 
WHERE id IN 
    (SELECT a.id 
    FROM users a 
     JOIN users b ON a.referred = b.id); 

は、ここに私のクエリです。

+0

データの他のすべての「子供のノードを削除すると気にしないだろうが、ユーザー ID = 1、= 1を参照します。DELETE FROM? – Tomm

+0

はあなたの参照された列は外部キーとして発表されましたか? yesの場合は、単純に 'cascade'を削除するオプションを追加すると、ジョブが実行されます。 – Hatik

+0

参照:[私は非常に単純なSQLクエリと思われるMCVEを提供するのはなぜですか?](https://meta.stackoverflow.com/questions/333952/what-should-i-provide-an-mcve-for-what-to-the-very-simple-sql-query) – Strawberry

答えて

1

私は、例えばアクションON DELETEを指定して外部キーを持つテーブルを作成することをお勧め:

ALTER TABLE users 
    ADD CONSTRAINT FK_REFERRED 
    FOREIGN KEY (referred) 
    REFERENCES users(id) 
    ON DELETE CASCADE 

のためならばID = 4と例のユーザーがID = 1でユーザーに参照されたし、ID = 7を持つ別のユーザーがされるように、最初のユーザ(ID = 4)を参照すると、ID = 1のユーザが削除されると、ID = 4のユーザも削除され、ID = 7のユーザも削除されます。

ですから、

+1

あなたの答えをありがとう - 期待どおりのものを探していました! –

1

これはしませんか?

Delete from users where (id = 1 or referred = 1) 
+0

他の人にも紹介されました – Hatik