2012-02-14 4 views
1
DELETE FROM table_a WHERE id IN(
    SELECT table_a.id AS id FROM table_a, table_b 
    WHERE table_a.object_id = 1 AND table_a.code = 'code' 
     AND table_a.code = table_b.code 
     AND table_b.id = table_a.b_id 
     AND table_b.table = 'testTable') 

これは私がMySQLに実行させたい(やや単純な)クエリです。私はこれがサポートされていないとJOINSを使用して解決できることをstackoverflowの他のページで読んだ。どのようにこれはJOINSを使用してクエリに「転写される」ことができますか?複数のテーブルでDELETEクエリを作成しようとしたことがないので、そうするのは難しいです。MySQL |

+1

の可能重複(http://stackoverflow.com/questions/2669165/deleting-doubled-users-mysql)[削除すると、ユーザ(MySQLの)倍] –

答えて

5

あなたがテーブルから削除し、サブクエリ—だけ制限で同じテーブルを参照することはできませんMySQLの以下のようなものが動作するはずです:

DELETE FROM table_a 
USING table_a 
INNER JOIN table_b 
    ON table_a.code = table_b.code 
    AND table_b.id = table_a.b_id 
    AND table_b.table = 'testTable' 
WHERE table_a.object_id = 1 
    AND table_a.code = 'code' 

重要な部分は、USINGです。 2つのテーブルを結合するだけであれば、両方からテーブルを削除します。 USINGは、これらのテーブルを処理に使用するようにMySQLに指示しますが、FROM句のテーブルからのみ削除します。

http://dev.mysql.com/doc/refman/5.0/en/delete.html

4

これは、一般的なMySQLの問題があり、選択と更新の間に一時テーブルを使用する/削除する:

DELETE FROM table_a WHERE id IN 
    (select id from 
     (SELECT table_a.id AS id FROM table_a, table_b 
     WHERE table_a.object_id = 1 
     AND table_a.code = 'code' 
     AND table_a.code = table_b.code 
     AND table_b.id = table_a.b_id 
     AND table_b.table = 'testTable') 
    ) tempTable 
2

mutlipleテーブルから削除するための2つの(わずかに異なる)構文があります。ここで1は、USINGなしだ:

DELETE a 
FROM 
     table_a AS a 
    INNER JOIN 
     table_b AS b 
    ON b.code = a.code 
    AND b.id = a.b_id 
WHERE 
     a.object_id = 1 
    AND a.code = 'code' 
    AND b.`table` = 'testTable' --- Do you actually have a column named "table"? 
0

マイウェイ...あなたがそれを使用することができれば!

DELETE FROM table_a WHERE id IN(SELECT id FROM(SELECT id FROM table_a WHERE userid=99 GROUP BY mobile HAVING COUNT(mobile) > 1) as t2)