SQL définit les valeurs d'une colonne égales aux valeurs d'une autre colonne de la même table

94

J'ai une table avec deux colonnes DATETIME.

L'un d'eux n'est jamais NULL, mais l'un d'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 la MISE À JOUR.

user1002358
la source

Réponses:

156

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

update your_table
set B = A
where B is null
mu est trop court
la source
21
UPDATE YourTable
SET ColumnB=ColumnA
WHERE
ColumnB IS NULL 
AND ColumnA IS NOT NULL
Icare
la source
20

Je le ferais de cette façon:

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

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

Dans cet exemple, si B sur une ligne donnée n'est pas nul, la mise à jour est un no-op.

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

Bill Karwin
la source
5

Je ne pense pas que cet autre exemple soit ce que vous recherchez. Si vous mettez simplement à 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
rwilliams
la source
1

Voici un exemple de code qui pourrait vous aider à copier la colonne A vers la colonne B:

UPDATE YourTable
SET ColumnB = ColumnA
WHERE
ColumnB IS NULL
AND ColumnA IS NOT NULL;
Waruna Manjula
la source
Remarque du modérateur - Veuillez ne pas annuler les mises à jour valides de votre message.
Bhargav Rao