MySQL : Sélection de données à partir de plusieurs tables avec des structures identiques mais des données distinctes
Lors de la gestion de grands ensembles de données, il est souvent nécessaire de stocker les données dans plusieurs tables avec un schéma identique à des fins de localisation ou de partitionnement. Cependant, extraire des données de plusieurs tables tout en conservant un ordre de tri spécifique peut présenter des défis.
Problème : erreur de colonne ambiguë dans la clause WHERE
Considérez l'instruction MySQL suivante :
SELECT * from us_music, de_music where `genre` = 'punk'
Cette requête tente de joindre les données de deux tables, us_music et de_music, en fonction de la colonne genre, qui existe dans les deux tableaux. Cependant, MySQL renvoie l'erreur suivante :
#1052 - Column 'genre' in where clause is ambiguous
Solution : Utilisation de la clause UNION
Pour résoudre l'ambiguïté, vous pouvez utiliser la clause UNION. La clause UNION combine les résultats de plusieurs instructions SELECT en un seul jeu de résultats. Voici comment l'utiliser dans ce cas :
(SELECT * from us_music where `genre` = 'punk') UNION (SELECT * from de_music where `genre` = 'punk')
Cette requête sélectionne d'abord les données de us_music où le genre est égal à « punk », puis elle effectue la même opération sur de_music. Les résultats des deux instructions SELECT sont ensuite combinés en un seul ensemble de résultats.
Tri des résultats combinés
Une fois les données combinées, vous pouvez spécifier un ordre de tri par ajout d'une clause ORDER BY après l'instruction UNION :
(SELECT * from us_music where `genre` = 'punk') UNION (SELECT * from de_music where `genre` = 'punk') ORDER BY `band_name`
Cette requête combinera les données des deux tables et triera les résultats en fonction du nom_bande colonne.
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!