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

SQLの別の列に基づいて列を更新する方法

    テーブル内の別の列の値に基づいて、テーブル内の列を更新する必要がある場合があります。 SQL Server、MySQL、PostgreSQLの別の列に基づいて列を更新する方法は次のとおりです。


    SQLの別の列に基づいて列を更新する方法

    SQLの別の列に基づいて列を更新する手順は次のとおりです。

    次のテーブルがあるとしますemployees(id、first_name、last_name)

    mysql> create table employees(id int, 
          first_name varchar(255),
          last_name varchar(255));
    
    mysql> insert into employees(id, first_name, last_name)
           values(1,'John','Doe'),
           (2,'Jane','Doe');
    
    mysql> select * from employees;
    +------+------------+-----------+
    | id   | first_name | last_name |
    +------+------------+-----------+
    |    1 | John       | Doe       |
    |    2 | Jane       | Doe       |
    +------+------------+-----------+

    別の列の値に基づいて列を更新するには、WHERE句を使用する方法とCASEステートメントを使用する方法の2つがあります。


    WHERE句を使用して別の列に基づいて列を更新する

    first_nameを更新するSQLクエリは次のとおりです。 WHERE句を使用したid列の値に基づく列。

    mysql> update employees
           set first_name='Tim'
           where id=1;
    mysql> select * from employees;
    +------+------------+-----------+
    | id   | first_name | last_name |
    +------+------------+-----------+
    |    1 | Tim        | Doe       |
    |    2 | Jane       | Doe       |
    +------+------------+-----------+

    上記のステートメントでは、UPDATEステートメントは最初にWHERE句に一致する行を選択し、列の値を更新します first_name

    以下に示すように、WHERE句でAND/ORなどの論理演算子を使用することもできます。

    mysql> update employees
           set first_name='Tim'
           where id=1 or id=3;

    以下に示すように、WHERE句でIN演算子を使用することもできます。

    mysql> update employees
           set first_name='Tim'
           where id in (1,3);

    以下に示すように、WHERE句で別のSELECTクエリを使用することもできます。

    mysql> update employees
           set first_name='Tim'
           where id in ( select id from emp2 );

    この場合、id値がSELECTクエリによって返される値の1つと一致するすべての行が更新されます。


    CASEステートメントを使用して別の列に基づいて列を更新する

    first_nameを更新するSQLクエリは次のとおりです。 idの値に基づく列 CASEステートメントを使用した列。

    mysql> update employees
         set first_name = (CASE
                               WHEN id = 1
                                 THEN 'Tim'
                               WHEN id = 2
                                 THEN 'Dave'
                               END);
    
    mysql> select * from employees;
    +------+------------+-----------+
    | id   | first_name | last_name |
    +------+------------+-----------+
    |    1 | Tim        | Doe       |
    |    2 | Dave       | Doe       |
    +------+------------+-----------+

    CASEステートメントを使用して、 first_nameの新しい値を指定します idの各値の列 桁。これは、WHERE句を使用するよりもはるかに優れたアプローチです。これは、WHERE句では、列の値を1つの新しい値にしか変更できないためです。 CASEステートメントを使用すると、id列の個々の値に応じて、列の値をさまざまな値に更新できます。

    また読む:MySQLで誤った文字列値を修正する方法


    別のテーブルに基づいて列を更新

    あるテーブルの列を別のテーブルの別の列から更新することもできます。別のテーブルemp2(id、first_name、last_name)もあるとします。 first_nameを更新したい 従業員 first_nameへのテーブル emp2 テーブル。両方のテーブルにも同じidがあります 列の値。

    mysql> create table emp2(id int,
           first_name varchar(255),
           last_name varchar(255));
    
    mysql> insert into emp2(id, first_name, last_name)
                values(1,'Don','Stone'),
                (2,'Jim','Stew');
    
    mysql> select * from emp2;
    +------+------------+-----------+
    | id   | first_name | last_name |
    +------+------------+-----------+
    |    1 | Don        | Stone     |
    |    2 | Jim        | Stew      |
    +------+------------+-----------+
    

    また読む:データベース管理者のためのトップMySQLブログ

    このような場合、次のUPDATEステートメント構文を使用して、別のテーブルの値に基づいて、あるテーブルの列を更新できます。

    UPDATE first_table, second_table 
    SET first_table.column1 = second_table.column2 
    WHERE first_table.id = second_table.table_id;

    first_nameを更新するSQLクエリは次のとおりです。 従業員の列 first_nameへのテーブル emp2の列 テーブル。

    mysql> UPDATE employees, emp2
    SET employees.first_name = emp2.first_name
    WHERE employees.id = emp2.id;
    
    mysql> select * from employees;
    +------+------------+-----------+
    | id   | first_name | last_name |
    +------+------------+-----------+
    |    1 | Don        | Doe       |
    |    2 | Jim        | Doe       |
    +------+------------+-----------+

    Ubiqを使用すると、データを簡単に視覚化し、リアルタイムのダッシュボードで監視できます。 Ubiqを無料でお試しください。

    1. OracleでのDATEのフォーマット

    2. ストアドプロシージャでテーブルを切り捨てる

    3. Oracleクエリを定期的に実行するための最良の方法

    4. ストアドプロシージャが存在するかどうかを確認するにはどうすればよいですか?