Maison  >  Article  >  base de données  >  Comment résoudre le problème de duplication dans MySQL en utilisant la connexion de jointure gauche

Comment résoudre le problème de duplication dans MySQL en utilisant la connexion de jointure gauche

王林
王林avant
2023-06-02 13:13:412838parcourir

    Mysql utilise la jointure gauche pour connecter les doublons

    Description du problème

    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é.

    Exemple de problème

    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;

    Comment résoudre le problème de duplication dans MySQL en utilisant la connexion de jointure gauche

    Le résultat de l'exécution était supérieur au total nombre d'enregistrements dans la table utilisateur

    Problème résolu

    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

    Lorsque MySQL utilise la jointure gauche, les données de la table de droite ont des données en double

    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!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer