IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Afficher les doublons avec une jointure interne


Sujet :

Requêtes PostgreSQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien de labo
    Inscrit en
    Janvier 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien de labo

    Informations forums :
    Inscription : Janvier 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Afficher les doublons avec une jointure interne
    bonjour,

    merci de me lire.

    je cherche une solution à mon problème suivant :

    contexte : je travaille sur QGIS pour saisir des données sur une base hebergée sur Postgresql. Cette base de données est alimenté par différent utilisateurs que je forme mais qui peuvent toujours faire des bêtises. L'idée ici est de créer une vue qui permettra de liste les eventuelles erreurs de saisie pour pouvoir les corriger en vérifiant cette vue journalièrement.

    Les informations que je souhaite vérifier sont sur une table (2) (data_nest_sw_save) qui est la sauvegarde de la table (1) data_nest_sw cad qu'elle accumule toutes les informations saisies dans la table 1. Les informqtions que je cherche à collecter (en plus des doublons) pour savoir où chercher et résoudre les erreurs sont : colony, nest, brood

    Probleme :
    je souhaite chercher les doublons dans 5 colonnes de cette table (d9_metal_1, d9_metal_2, d9_metal_3, d9_metal_4, d9_metal_5) mais puisque celle ci contient toutes les lignes de la table 1, il ne me faut faire la recherche que sur le derniers enregistrement de chaque identifiant (colony, nest, brood).

    Je bute sur le critère de recherche des doublons entre les 5 différentes colonnes !

    mon code


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    SELECT DISTINCT  data_nest_sw_save.colony,
    data_nest_sw_save.nest,
    d9_metal_1,
    d9_metal_2,
    d9_metal_3,
    d9_metal_4,
    d9_metal_5,
    data_nest_sw_save.brood
    FROM field_data.data_nest_sw_save 
     
    --ici la jointure pour pouvoir faire la recherche sur les dernières valeurs de la table 2
     
    INNER JOIN (SELECT colony, nest, brood, max(time_save) AS max_time FROM field_data.data_nest_sw_save data_nest_sw_save_1 GROUP BY colony, nest, brood) data_nest_sw_save_1 
    ON data_nest_sw_save_1.colony=data_nest_sw_save.colony AND data_nest_sw_save_1.nest=data_nest_sw_save.nest AND data_nest_sw_save_1.brood=data_nest_sw_save.brood AND data_nest_sw_save.time_save = max_time
     
    -- ici je cherche les doublons mais il doit y avoir un truc qui cloche
     
    WHERE EXISTS (SELECT * FROM field_data.data_nest_sw_save data_nest_sw_save_1
    WHERE (data_nest_sw_save.d9_metal_1 <>'' 
    AND (data_nest_sw_save.d9_metal_1 = data_nest_sw_save_1.d9_metal_1
    OR data_nest_sw_save_1.d9_metal_2 = data_nest_sw_save.d9_metal_2
    OR data_nest_sw_save_1.d9_metal_3 = data_nest_sw_save.d9_metal_3
    OR data_nest_sw_save_1.d9_metal_4 = data_nest_sw_save.d9_metal_4
    OR data_nest_sw_save_1.d9_metal_5 = data_nest_sw_save.d9_metal_5))
    alors je suppose que ma recherche de doublons n'est pas fini car je dois encore tester si d9_metal_2 <>'' ... mais pour l'instant je sais que mon code ne marche pas parce que mon critère :


    hypothèse :

    "data_nest_sw_save.d9_metal_1 = data_nest_sw_save_1.d9_metal_1" ne marche pas car la table data_nest_sw_save_1 ne renvoie pas la bonne réponse j'ai l'impression. Alors j'aimerai éjà résoudre ca avant d'aller plus loin.
    Je le sais car si je remplace "data_nest_sw_save.d9_metal_1 <>'' " par "data_nest_sw_save_1.d9_metal_1 <>'' " la requête ne me renvoie pas toutes les lignes vides donc je suppose qu'il y a quelque chose qui ne tourne pas rond autour de là. J'ai pensé que celq pouvait venir de la jointure aussi et qu'il y avait deux fois la table data_nest_sw_save_1 mais même avec une troisième ca ne veut pas marcher.


    conclusion :
    c'est peut etre super simple mais j'ai passé la journée dessus et parfois un tiers peut régler ca en 2s avec un oeil nouveau ... ou alors ne suis je pas du tout sur la bonne voie car je pense quand même être assez proche du but!

    J'ai juste besoin qu'on me guide un peu

    merci

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Je ne sais pas si ça vient de moi, mais j'ai du mal à comprendre votre besoin
    Ce serait beaucoup plus clair avec un exemple de données en entrée et un exemple de résultat attendu

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien de labo
    Inscrit en
    Janvier 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien de labo

    Informations forums :
    Inscription : Janvier 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    merci pour la reponse je vois que l'énoncé n'était pas assez clair


    comment sélectionner vous les doublons (<> '') dans 5 colonnes différentes avec une jointure interne ?

    est ce une méthode différente de celle ci .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT DISTINCT *
    FROM table t1
    WHERE EXISTS (
                  SELECT *
                  FROM table t2
                  WHERE t1.ID <> t2.ID
                  AND   t1.champ1 = t2.champ1
                  AND   t1.champ2 = t2.champ2
                  AND   t1.champ3 = t2.champ3 )
    merci

Discussions similaires

  1. Afficher les doublons d'une table
    Par allouchi dans le forum Langage SQL
    Réponses: 9
    Dernier message: 03/06/2011, 18h34
  2. éviter les doublons dans une jointure
    Par alyjeje dans le forum SQL
    Réponses: 4
    Dernier message: 20/01/2011, 11h00
  3. Réponses: 2
    Dernier message: 21/04/2009, 21h10
  4. Réponses: 2
    Dernier message: 04/04/2008, 12h54
  5. afficher les doublons avec mysql
    Par oceanbigone dans le forum Requêtes
    Réponses: 10
    Dernier message: 02/10/2006, 15h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo