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
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 :
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))
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
Partager