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

MYSQL-groupbyselectステートメントの結果であるすべてのアイテムのフィールドを更新する方法

    selectステートメントによって返されるセット内のfield1、field2、およびfield3が含まれるテーブルを更新することを意味しますか?

    例えば。

    update table, 
         ( select field1, field2, field3 
           FROM table WHERE field1= 5  AND field_flag =1 
           GROUP BY field1, field2, field3 limit 1000 ) temp
    set table.field_flag = 99 
    where table.field1=temp.field1 and table.field2=temp.field2 and table.field3 = temp.field3
    

    更新により、1000行をはるかに超える行が更新される可能性があることに注意してください。

    一時テーブルも使用できます:

    create temporary table temptab as
    select field1, field2, field3 
    FROM table WHERE field1= 5  AND field_flag =1 
    GROUP BY field1, field2, field3 limit 1000 
    
     update table, 
            temptab temp
     set table.field_flag = 99 
     where table.field1=temp.field1 and table.field2=temp.field2 and table.field3 = temp.field3
    

    これには、temptabを後で使用できるという利点があります。また、インデックスを追加して更新を高速化できるという利点もあります。

    create index on temptab (field1, field2, field3);
    


    1. DBCC CHECKDBの影響を最小限に抑える:すべきこととすべきでないこと

    2. すべての子ノードを削除するPHP再帰関数により、stackoverflowが発生します

    3. DATETIMEFROMPARTS()SQL Server(T-SQL)の例

    4. LinuxにSQLServerをインストールする方法