Maison > base de données > tutoriel mysql > 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
Libérer: 2024-11-20 11:29:02
original
913 Les gens l'ont consulté

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
Copier après la connexion

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 != '' 
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal