web-dev-qa-db-fra.com

Les valeurs de jeu SQL d'une colonne sont égales à celles d'une autre colonne de la même table

J'ai une table avec deux colonnes DATETIME.

L'un d'eux n'est jamais NULL, mais l'un d'entre eux est parfois NULL.

J'ai besoin d'écrire une requête qui définira toutes les lignes NULL pour la colonne B égales aux valeurs de la colonne A.

J'ai essayé cet exemple mais le SQL dans la réponse sélectionnée ne s'exécute pas car MySQL Workbench ne semble pas aimer le FROM dans UPDATE.

74
user1002358

On dirait que vous travaillez dans une seule table, alors quelque chose comme ceci:

update your_table
set B = A
where B is null
127
mu is too short
UPDATE YourTable
SET ColumnB=ColumnA
WHERE
ColumnB IS NULL 
AND ColumnA IS NOT NULL
16
Icarus

Je le ferais de cette façon:

UPDATE YourTable SET B = COALESCE(B, A);

COALESCE est une fonction qui retourne son premier argument non nul.

Dans cet exemple, si B sur une ligne donnée n'est pas null, la mise à jour est une opération sans opération.

Si B est null, la COALESCE l'ignore et utilise A à la place.

13
Bill Karwin

Je ne pense pas que cet autre exemple correspond à ce que vous recherchez. Si vous ne faites que mettre à jour une colonne à partir d'une autre colonne de la même table, vous devriez pouvoir utiliser quelque chose comme ceci.

update some_table set null_column = not_null_column where null_column is null
4
rwilliams

Voici un exemple de code qui pourrait vous aider à gérer les colonnes A à B:

UPDATE YourTable
SET ColumnB = ColumnA
WHERE
ColumnB IS NULL
AND ColumnA IS NOT NULL;
0
Waruna Manjula