sql >> データベース >  >> RDS >> Mysql

Mysqlは、別のテーブルからのIDによって1つのテーブルを削除します

    deleteを使用する joinと一緒に このように:

    mysql> create table a (id int);
    mysql> insert into a values (1), (2), (3), (4);
    mysql> create table b (id int);
    mysql> insert into b values (2), (3);
    mysql> delete a from a join b on a.id=b.id where b.id > 2;
    mysql> select * from a;
    +------+
    | id   |
    +------+
    |    1 |
    |    2 |
    |    4 |
    +------+
    

    これは、任意の数のテーブルにスケーリングされます。例:

    DELETE a 
    FROM a 
    JOIN b ON a.idA=b.idA 
    JOIN c ON b.idB=c.idB;
    

    これにより、aから削除されます bのレコードから参照されるすべてのレコード これらはcから参照されます 。次のようにWHERE句を追加することもできます:

    DELETE a 
    FROM a 
    JOIN b ON a.idA=b.idA 
    JOIN c ON b.idB=c.idB
    WHERE a.status='done' AND
          b.status='open' AND
          c.status='open';
    

    削除する行数を制限する場合は、次のようにします。

    DELETE a 
    FROM a 
    JOIN b ON a.idA=b.idA 
    JOIN c ON b.idB=c.idB
    LIMIT 500000;
    

    最初の500000行を削除する場合は、最初の行を調整する必要があるため、行間の順序を確立する必要があります。つまり、いくつかの基準で行を並べ替えてから、次のように制限する必要があります。

    DELETE a 
    FROM a 
    JOIN b ON a.idA=b.idA 
    JOIN c ON b.idB=c.idB
    ORDER BY a.something
    LIMIT 500000;
    


    1. 更新時のSQLエラー:UPDATEステートメントがFOREIGNKEY制約と競合していました

    2. MYSQL / PHPで重複するTEXTフィールドをチェックするための最良の方法は何ですか?

    3. SQLServerで現在使用されている言語を取得する

    4. SQLServer2012の拡張イベントに対する重要な変更