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

別の列のフィルターに基づいて列を更新する方法

    このチュートリアルでは、SQLを使用してテーブルの行を更新するさまざまな方法について説明し、より一般的な更新からより具体的な方法へと進んでいきます。

    完全更新

    すべてのフィールドを同じ値に更新する必要がある場合は、単純なUPDATEを使用して更新できます。 コマンド。

    UPDATE table
    SET col = new_value;
    
    条件付き更新

    列の現在の値が条件に一致するかどうかに応じて条件付き更新を行うには、WHEREを追加します。 これを指定する句。データベースは最初にWHEREに一致する行を検索します 句を入力してから、それらの行に対してのみ更新を実行します。

    UPDATE table
    SET col = new_value
    WHERE col = old_value;
    

    これを拡張するために、WHEREに何でも追加できます 有効な式である限り、好きな句。したがって、同じテーブル内の別の列の値に基づいて更新を実行するには、次のように実行できます。

    UPDATE table
    SET col = new_value
    WHERE other_col = some_other_value;
    

    WHERE以降 句には任意の有効な式を含めることができます。また、複数の列が基準を満たす場合に更新を行うこともできます

    UPDATE table
    SET col = new_value
    WHERE col = old_value
    AND other_col = some_other_value;
    
    UPDATE table
    SET col = new_value
    WHERE col = old_value
    OR other_col = some_other_value;
    

    ご覧のとおり、WHEREを展開できます 必要なものに更新するために行をフィルタリングするために、必要なだけ句を記述します。

    別のテーブルの状態に基づいて1つのテーブルの行を更新する場合はどうなりますか?この質問は、これを行うためのいくつかの異なる方法につながります。

    WHERE以降 句には任意の有効な式を含めることができます。サブクエリを使用できます:

    UPDATE table
    SET col = new_value
    WHERE other_col IN (
    SELECT other_col
    FROM other_table
    WHERE conditional_col = 1
    );
    

    SETでサブクエリを使用することもできます 列を別のテーブルの値に設定する場合は、ステートメントの一部

    UPDATE table
    SET col = (
    SELECT other_col
    FROM other_table
    WHERE other_table.table_id = table.id
    );
    

    おそらく、より簡単な方法は、UPDATEの後に複数のテーブルを指定することです。 句。 SETのみ 式は更新を実行しますが、追加のテーブルをリストすると、テーブルを含めることができます。

    UPDATE table, other_table
    SET table.col = other_table.other_col
    WHERE table.id = other_table.table_id;
    

    WHEREを展開するのと同様です 節では、結合する必要のあるテーブルが複数ある場合は、テーブルの数を拡張して、必要なすべてのテーブルを含めることができます。


    1. 配列引数を使用して集合を返す関数を複数回呼び出す

    2. SQL2008RDLファイルをSQL2005に変換する

    3. SQLite内部結合

    4. SQLServerテーブルの列のIDプロパティを削除する方法-SQLServer/T-SQLチュートリアル44