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.

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

21
UPDATE YourTable
SET ColumnB=ColumnA
WHERE
ColumnB IS NULL 
AND ColumnA IS NOT NULL

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.


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

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;

Remarque du modérateur - Veuillez ne pas annuler les mises à jour valides de votre message.
Bhargav Rao
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.