web-dev-qa-db-fra.com

SQL UPDATE toutes les valeurs d'un champ avec la chaîne ajoutée CONCAT ne fonctionne pas

Voici ce que je veux faire:

tableau actuel:

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

Requête mystère (quelque chose comme "UPDATE table SET data = CONCAT(data, 'a')")

table résultante:

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

c'est ça! Je dois juste le faire en une seule requête, mais je n'arrive pas à trouver un moyen. J'utilise mySQL sur bluehost (je pense que sa version 4.1)

Merci tout le monde.

142
Fresheyeball

C'est à peu près tout ce dont vous avez besoin:

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)

Vous ne savez pas pourquoi vous auriez des problèmes, bien que je teste ceci sur 5.1.41

232
Marc B

CONCAT avec une valeur null renvoie null, la solution la plus simple est:

UPDATE myTable SET spares = IFNULL (CONCAT (pièces de rechange, "chaîne"), "chaîne")

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

ne travaille pas pour moi.

spares est NULL par défaut mais son varchar

9
DS_web_developer

Résolu. Il s'avère que la colonne avait un ensemble limité de caractères qu'elle accepterait, l'a modifiée et que la requête fonctionne désormais correctement.

7
Fresheyeball

convertir les valeurs NULL avec une chaîne vide en l'enveloppant dans COALESCE

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

OR

Utilisez CONCAT_WS à la place:

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

Impossible de résoudre le problème. La syntaxe de la requête était correcte, mais "0 ligne affectée" lors de l'exécution.

La solution était:

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

Celui-là a fonctionné.

5
Jeremy Thille

Tu peux le faire:

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 = field + value ne fonctionne pas lorsque field est null.

1
Eric