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

MYSQL:複数のフィールドの連結でフィールドを更新

    このクエリの場合

    UPDATE tabex SET field1=CONCAT(tabex.a1,', ',tabex.a2,', ',tabex.a3,', ',tabex.a4,', ',tabex.a5,', ',tabex.a6,', 'tabex.a7,', ',tabex.a8,', ',tabex.a9 );
    

    行には影響しません。唯一の説明は、テーブルが空であるということです。テーブルのすべての行を更新します。ただし、列の1つがNULLの場合、field1列もNULLになります。
    これを回避するには、COALESCE()関数を使用する必要があります。この関数は、NULLではない最初のパラメーターを返します。

    UPDATE tabex SET field1=CONCAT(COALESCE(tabex.a1, ''),', ',...);
    

    補足として、なぜあなたがこれをしたいのか、私は尋ねなければなりません。列のカンマ区切り値は、ほとんどの場合悪い考えです。

    そして最後に、CONCAT_WS()を使用したクエリは間違っています。関数名の_WSは「withseparator」の略であるため、最初のパラメーターはセパレーターであり、その後、関数の他のパラメーターの間に配置されます。したがって、次のように書く必要があります:

    UPDATE tabex SET field1=CONCAT_WS(',', tabex.a1, tabex.a2, tabex.a3,...);
    

    CONCAT_WS()関数のもう1つの利点は、NULL値を無視することです。 マニュアルで2つの関数の詳細を読む




    1. MySQLクエリで複数の合計を選択し、それらを別々の列に表示します

    2. MyBatisを使用してオブジェクトのJavaリストをOracleストアドプロシージャに渡す方法は?

    3. 最新のMicrosoftAccessニュースについては、4月9日火曜日に参加してください

    4. Oracleディクショナリ・ビューを使用してPL/SQLパッケージレベルのタイプを検出