2011-07-25 14 views
0

私は2つのテーブルuserとbanを持っています。ユーザーテーブルには2つの列idtypeがあります。 Banテーブルには、2つのカラムuserIDbannedUserIDもあります。 テーブル内のレコードを削除します。bannedUserIDには、typeの「Admin」があります。SQLでの結合操作の削除

私はこのようなクエリを考え出しましたが、正しいかどうかはわかりません。

DELETE FROM ban WHERE ban.bannedUserID IN (SELECT id FROM user WHERE type = 'Admin')

それは正しいですか?私は何かを追加/削除する必要がありますか?

+2

正しいと思われます –

+1

私にも良く見えます –

+1

あなたの質問は正しいようです。私は、テーブル 'ban'の' userID'と 'bannedUserID'という2つのカラムの使い方について疑問に思っています。 –

答えて

4

あなたはDELETEが正しいかどうかわからない場合、あなたはSELECT同等に変換して、それをテストすることができます。

SELECT b.bannedUserID 
FROM ban b JOIN user u ON b.bannedUserID = u.id 
WHERE u.type = 'Admin'; 

は、削除したいIDのそのクエリによって返されたものはありますか? (あなたがトランザクションをサポートするストレージエンジン、すなわちないMyISAMテーブルを使用している場合)、必要な場合は、ロールバックすることができるように

次に、トランザクションでそれを試してみてください。私はMySQLのマルチを使用してい

START TRANSACTION; 

DELETE b 
FROM ban b JOIN user u ON b.bannedUserID = u.id 
WHERE u.type = 'Admin'; 

/* do some SELECT to see if the correct rows have been deleted and no others */ 
/* but if anything appears wrong, and ban is an InnoDB table, you can... */ 

ROLLBACK; 

注意をテーブルのDELETE構文サブクエリのアプローチと同じように動作するはずですが、場合によっては柔軟性が高くなる可能性があります。

+0

良いもの! +1 – RolandoMySQLDBA

+0

+1教訓的なステップバイステップ –

+0

私は自分のSQLを走らせて、それは返事のために働いた、働いた。 –

関連する問題