3

テーブルのフィールドを、同じテーブルのいくつかのフィールドの CONCAT で更新しようとしています。

これで

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

このクエリには、影響を受ける行が 0 行あり、エラーはありません。

この他のクエリで

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

一部の a(n) フィールドの内容が NULL の場合、mysql は前の結果のコピーを置きます

誰かが私を助けることができますか?

4

1 に答える 1

5

このクエリのとき

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 は「セパレーターあり」の略なので、最初のパラメーターはセパレーターであり、関数の他のパラメーターの間に配置されます。したがって、次のように書く必要があります。

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

CONCAT_WS() 関数のもう 1 つの利点は、NULL 値を無視することです。マニュアルで 2 つの機能の詳細をお読みください。

于 2013-11-07T13:18:42.487 に答える