Maison  >  Article  >  base de données  >  Comment copier des données dans une table à l'aide de l'auto-jointure ?

Comment copier des données dans une table à l'aide de l'auto-jointure ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-20 11:29:02806parcourir

How to Copy Data Within a Table Using Self-Join?

Copier des données dans une table

Dans une base de données relationnelle, il est souvent utile de copier des données d'une ligne à une autre au sein d'une même table. Cet article explore une méthode pour mettre à jour la valeur d'une ligne en utilisant les données d'une ligne différente dans le même tableau.

Considérons un tableau avec la structure suivante :

ID NAME VALUE
1 Test VALUE1
2 Test2 VALUE2
1 Test2
4 Test
1 Test3 VALUE3

L'objectif est de mettre à jour le valeurs pour les lignes avec des valeurs manquantes dans la colonne "VALEUR" en récupérant la valeur d'une autre ligne avec le même "NOM". Le résultat attendu :

ID NAME VALUE
1 Test VALUE1
2 Test2 VALUE2
1 Test2 VALUE2
4 Test VALUE1
1 Test3 VALUE3

La solution implique une auto-jointure. En utilisant une table temporaire pour stocker uniquement les lignes non nulles, nous pouvons mettre à jour la table d'origine :

UPDATE data_table t, (SELECT DISTINCT ID, NAME, VALUE
                        FROM data_table
                       WHERE VALUE IS NOT NULL AND VALUE != '') t1
   SET t.VALUE = t1.VALUE
 WHERE t.ID = t1.ID
   AND t.NAME = t1.NAME

Explication :

  • La sous-requête (SELECT DISTINCT ID, NAME, VALUE... ) crée une table temporaire t1 avec uniquement les lignes non nulles.
  • Le L'instruction UPDATE joint ensuite t à t1 sur les colonnes ID et NAME.
  • Si les valeurs correspondent et que la colonne VALUE dans t est nulle, elle est mise à jour avec la VALEUR correspondante de t1.

Requête mise à jour :

La solution fournie peut être affinée pour obtenir l'objectif souhaité sortie :

UPDATE data_table dt1, data_table dt2 
SET dt1.VALUE = dt2.VALUE 
WHERE dt1.NAME = dt2.NAME AND dt1.VALUE = '' AND dt2.VALUE != '' 

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn