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

IN条件によるUNIONサブクエリを使用したMySQLDELETEFROM

    代わりにこのバージョンを試してください:

    DELETE FROM startpoint
        WHERE id IN (select *
                     from ((SELECT id FROM stairs WHERE building = 123)
                           UNION
                          (SELECT id FROM lift WHERE building = 123)
                           UNION
                          (SELECT id FROM qrcodeid WHERE building = 123)
                    )
    

    この問題は、サブクエリの定義に関する難解な問題だと思います。サブクエリはselect 一方、union selectの接続詞です ステートメント。

    編集:

    実際、効率が必要な場合は、このアプローチをまったく使用しません。エラーを修正する方法を示しようとしていました。より良い解決策は次のとおりです。

    DELETE sp FROM startpoint sp
        WHERE EXISTS (select 1 from stairs s where s.building = 123 and s.id = sp.id) or
              EXISTS (select 1 from lift l where l.building = 123 and l.id = sp.id) or
              EXISTS (select 1 from qrcodeid q where q.building = 123 and q.id = sp.id);
    

    stairs(id, building)にインデックスを付けることをお勧めします 、lift(id, building) 、およびqrcodeid(id, building)



    1. PythonでのMySQL警告のトラップ

    2. PostgreSQL12での進捗レポートの機能強化

    3. LEFTJOINとINNERJOINを使用して挿入します

    4. SQL Server:クエリを使用して列のデフォルト値を確認する