web-dev-qa-db-ja.com

SQLのUPDATE文字列CONCATを含むフィールド内のすべての値が機能しない

これが私がやりたいことです。

現在のテーブル:

+----+-------------+  
| id | data        |  
+----+-------------+  
|  1 | max         |  
|  2 | linda       |  
|  3 | sam         |  
|  4 | henry       |  
+----+-------------+  

ミステリークエリ("UPDATE table SET data = CONCAT(data, 'a')"のようなもの)

結果の表

+----+-------------+  
| id | data        |  
+----+-------------+  
|  1 | maxa        |  
|  2 | lindaa      |  
|  3 | sama        |  
|  4 | henrya      |  
+----+-------------+  

それでおしまい!私はただ一つの問い合わせでそれをする必要があります、しかし方法を見つけるようには思えません。私はbluehostでmySQLを使っています(私はそのバージョン4.1だと思います)

みんな、ありがとう。

138
Fresheyeball

必要なものはそれだけです。

mysql> select * from t;
+------+-------+
| id   | data  |
+------+-------+
|    1 | max   |
|    2 | linda |
|    3 | sam   |
|    4 | henry |
+------+-------+
4 rows in set (0.02 sec)

mysql> update t set data=concat(data, 'a');
Query OK, 4 rows affected (0.01 sec)
Rows matched: 4  Changed: 4  Warnings: 0

mysql> select * from t;
+------+--------+
| id   | data   |
+------+--------+
|    1 | maxa   |
|    2 | lindaa |
|    3 | sama   |
|    4 | henrya |
+------+--------+
4 rows in set (0.00 sec)

私は5.1.41でこれをテストしていますが、なぜあなたは問題を抱えているのでしょうか?

222
Marc B

NULL値を指定したCONCATはNULLを返すので、最も簡単な解決策は次のとおりです。

UPDATE myTableのSET spares = IFNULL(CONCAT(スペア、 "文字列")、 "文字列")

32
andrejc
UPDATE mytable SET spares = CONCAT(spares, ',', '818') WHERE id = 1

私のために働いていません。

スペアはデフォルトでNULLですが、そのvarchar

9

それを解決しました。カラムの文字数が制限されていて変更されていて、クエリが正常に機能することがわかりました。

7
Fresheyeball

NULLにラップすることで、空の文字列でCOALESCEの値を変換します

"UPDATE table SET data = CONCAT(COALESCE(`data`,''), 'a')"

OR

代わりに CONCAT_WS を使用してください。

"UPDATE table SET data = CONCAT_WS(',',data, 'a')"
6
Rohan Khude
UPDATE 
    myTable
SET 
    col = CONCAT( col , "string" )

うまくいかなかった。リクエストの構文は正しかったが、実行時に「0行が影響を受けた」。

解決策は次のとおりです。

UPDATE 
    myTable 
SET 
    col = CONCAT( myTable.col , "string" )

それはうまくいった。

4
Jeremy Thille

あなたはこれを行うことができます:

Update myTable
SET spares = (SELECT CASE WHEN spares IS NULL THEN '' ELSE spares END AS spares WHERE id = 1) + 'some text'
WHERE id = 1

fieldがnullの場合、field = field + valueは機能しません。

1
Eric