Maison >base de données >tutoriel mysql >Comment résoudre le problème de duplication dans MySQL en utilisant la connexion de jointure gauche
Lors de l'utilisation d'une requête de jointure, par exemple, en utilisant la table A comme table principale et en joignant à gauche la table B, nous nous attendons à savoir combien d'enregistrements il y a dans la table A, requête Le résultat sera autant d'enregistrements qu'il y en a, mais il peut y avoir des résultats comme celui-ci, c'est-à-dire que le nombre total d'enregistrements interrogés est supérieur au nombre total d'enregistrements dans le tableau A, et certaines colonnes sont répétées lorsque le les résultats de la requête sont affichés. Simple C'est-à-dire que le produit cartésien est réalisé.
La table A est la table utilisateur (user), et les champs sont :
ID nom userid
1 aaaa 10001
2 bbbb 10002
3 ccccc 10003
La table B est le premier type de table product ( product), les champs sont :
ID title time userid
1 Title 1 2014-01-01 10002
2 Title 2 2014-01-01 10002
3 Title 3 2014-01-01 10001
4 Title 4 2018-03-20 10002
5 Titre 5 2018-03-20 10003
À ce moment-là, lorsque nous avons utilisé le SQL suivant pour exécuter, nous avons constaté que
selecct * from user left join product on user.userid=product.userid;
Le résultat de l'exécution était supérieur au total nombre d'enregistrements dans la table utilisateur
En fait, ce problème peut être vu par un œil averti en un coup d'œil, car le mot-clé de jointure gauche n'est pas unique dans la table produit, donc cette partie des données non uniques produit un produit cartésien, ce qui entraîne plus de résultats d'exécution que prévu.
La solution consiste à utiliser des clés uniques pour associer et effectuer des requêtes de lien
Le mot-clé LEFT JOIN renverra toutes les lignes de la table de gauche (nom_table1). Même s'il n'y a aucune ligne correspondante dans la table de droite (nom_table2). Pour le moment, il n'y a aucun problème si la bonne table (table_name2) ne contient aucune donnée ou une seule donnée après avoir été filtrée par le mot-clé on.
Ce que je veux dire, c'est que faire s'il y a des données en double (duplication complète en entreprise) dans la bonne table (table_name2).
Lorsque des données en double apparaissent dans la table de droite (nom_table2) après avoir été filtrées par le mot-clé on, les données trouvées à ce moment seront : données de la table de droite * données en double + autres données conditionnelles dans la table de droite, et le nombre de données nous avons besoin de différent.
Ma solution consiste d'abord à interroger la bonne table (table_name2) en fonction du regroupement de champs de filtre, à filtrer les mêmes données, puis à traiter le résultat comme la bonne table pour l'association
前面脑补 LEFT JOIN (SELECT MODEL_CODE,MODEL_NAME from tm_model GROUP BY MODEL_CODE) tm on tav.model_code = tm.MODEL_CODE 后面脑补
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!