Copie de données entre les lignes d'un tableau
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 du même tableau. Prenons un tableau 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 VALEURS non vides de d'autres lignes avec le même NOM (où dt2.VALUE n'est pas vide).
Comme alternative, nous pouvons utiliser un sous-requête pour identifier les lignes avec des VALEURS non vides et les joindre à 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 flexibilité dans la manipulation des données dans un tableau, vous permettant de mettre à jour les valeurs en fonction de critères qui incluent d'autres lignes du même tableau.
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!