Copie de données entre les lignes d'une table
Dans la gestion de bases de données, il est souvent nécessaire de mettre à jour les lignes en fonction des données d'autres lignes de la table. même tableau. Considérons une table avec les colonnes ID, NAME et VALUE qui contiennent des valeurs NAME en double, comme suit :
ID | NAME | VALUE | ---------------------------- 1 | Test | VALUE1 | 2 | Test2 | VALUE2 | 1 | Test2 | | 4 | Test | | 1 | Test3 | VALUE3 |
Supposons que nous souhaitions mettre à jour les champs VALUE vides dans les lignes avec des valeurs NAME en double. Pour y parvenir, nous pouvons utiliser des requêtes SQL qui référencent et mettent à jour les valeurs dans la même table.
Une approche consiste à utiliser une instruction UPDATE avec une jointure. Dans la requête suivante, nous joignons la data_table deux fois, en les alias dt1 et dt2 :
UPDATE data_table dt1, data_table dt2 SET dt1.VALUE = dt2.VALUE WHERE dt1.NAME = dt2.NAME AND dt1.VALUE = '' AND dt2.VALUE != ''
Cette requête identifie et met à jour les champs VALUE vides (où dt1.VALUE est vide) avec des champs non vides VALEURS d'autres lignes avec le même NOM (où dt2.VALUE n'est pas vide).
Comme alternative, nous pouvons utiliser une sous-requête pour identifier les lignes avec des VALEURS non vides et joignez-les à la table d'origine pour la mise à jour :
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
Ces deux requêtes donneront le résultat souhaité :
ID | NAME | VALUE | ---------------------------- 1 | Test | VALUE1 | 2 | Test2 | VALUE2 | 1 | Test2 | VALUE2 | 4 | Test | VALUE1 | 1 | Test3 | VALUE3 |
Ces approches offrent une certaine flexibilité dans la manipulation des données dans un tableau, vous permettant de mettre à jour les valeurs en fonction de critères incluant d'autres lignes du même tableau.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3