begin process at 2012 05 26 12:28:57
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

Access

 > 

Requêtes

 > 

Comment supprimer doublons s/ inner join


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Comment supprimer doublons s/ inner join

mardi 12 août 2008 à 13:03:34 | Comment supprimer doublons s/ inner join

810mcu

Bonjour à tous,

Base Access2000 + D6 + TADOquery 

En exécutant une recherche avec ce qui suit

 

SELECT GRUME_H_NIOKI_.*, HIST_GRUME_H_NIOKI_.*

FROM GRUME_H_NIOKI_

           inner JOIN HIST_GRUME_H_NIOKI_

           ON GRUME_H_NIOKI_.ID_GRUME_H = HIST_GRUME_H_NIOKI_.ID_GRUME_H

 

Where

GRUME_H_NIOKI_.n_abat

  Like 458

 

Ok il le fait,

mais alors avec autant de doublons que des registres qui se trouvent ds la

table HIST_GRUME_H_NIOKI_

 

Qq sait comment faire pour enlever tous ces doublons, SVP.

Merci
810mcu

mardi 12 août 2008 à 13:32:48 | Re : Comment supprimer doublons s/ inner join

810mcu

Tj moi,
pour mieux comprendre le sujet

Table1
GRUME_H_NIOKI_
Champs
ID_GRUME_H,
N_ABAT,
...

Table2
HIST_GRUME_H_NIOKI_
Champs
ID_HIST_GRUNE_H,
ID_GRUME_H,
POSITION,
DATA_BE
...

la liaison GRUME_H_NIOKI_.ID_GRUME_H = HIST_GRUME_H_NIOKI_.ID_GRUME_H

merci a vs tous
mardi 12 août 2008 à 14:44:25 | Re : Comment supprimer doublons s/ inner join

casy

Membre Club

Comprend pas bien ton problème.

Avec INNER JOIN, tu ne dois normalement avoir que les enregistrements des 2 tables qui sont liés entre-eux. Si tu as des doublons c'est qu'ils sont surrement en doublons dans les tables.

Au pire essaye avec un SELECT DISTINCT

---- Sevyc64  (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #    [ Lien ]
mardi 12 août 2008 à 18:45:27 | Re : Comment supprimer doublons s/ inner join

810mcu

Salut casy,
SELECT DISTINCT, ne passeras pas a cause de (SELECT GRUME_H_NIOKI_.*, HIST_GRUME_H_NIOKI_.* )

tout en sachant que
table1 GRUME_H_NIOKI_ n’as que 1 registre avec
Champs
ID_GRUME_H,
N_ABAT,
...

et que
table2 HIST_GRUME_H_NIOKI_ elle une multitude de registre avec ID_GRUME_H,
Champs
ID_HIST_GRUNE_H,
ID_GRUME_H,
POSITION,
DATA_BE
...

1 - l’idée est de listé (DBGrid, query) le seul registre de la
table GRUME_H_NIOKI_(Table1)
du champ N_ABAT,
via la procédure de recherche (Where GRUME_H_NIOKI_.n_abat  Like 458)

2 - mais aussi de pouvoir faire des recherches sur des champs de la table HIST_GRUME_H_NIOKI_ (Table2)
en réinitialisant la fonction

tout en gardent l’affichage stand art
(l’idée est de listé (DBGrid, query) le seul registre de la )

au final
query = champs Table1 + Table2
possibilité de recherche dans tous les champs des 2 tables et
faire en sorte de n’afficher que celui de la table1 (ou il n’y as pas de possibilité de doublons)

je pense que c’est un peut plus clair
Merci
mardi 12 août 2008 à 19:05:31 | Re : Comment supprimer doublons s/ inner join

casy

Membre Club
Donc si je comprend bien, une requette avec le critère de sélection ne renverra systématiquement qu'un seul enregistrement sur la table 1.

Par contre, sur la table 2, tu peux avoir multitude d'enregistrements liés à l'unique de la table 1.

A partir du moment ou tu renvoie des champs de la table 2, ta requette globale avec jointure te renverra donc autant de résultats que tu aura d'enregistrements liés dans la table 2 avec à chaque fois, pour les champs de a table 1, les valeurs dupliquées corresponds à l'unique enregistrement.

Ceci est le fonctionnement même de la jointure et est parfaitement logique. Il n'y a donc pas de doublons (sauf si tu en as dans la table 2)

Peut-etre faut-il que tu rajoute des critères de sélection dans le where concernant la table 2

Ou alors tu ne renvoie que les champs de la table 1 avec à ce moment là un SELECT DISTINCT et tu ne devrais avoir qu'un seul résultat dans ce cas.

---- Sevyc64  (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #    [ Lien ]
mardi 12 août 2008 à 19:29:11 | Re : Comment supprimer doublons s/ inner join

810mcu

et bien j’ai déjà essayé cela aussi

SELECT GRUME_H_NIOKI_.*, HIST_GRUME_H_NIOKI_.*
FROM GRUME_H_NIOKI_
           inner JOIN HIST_GRUME_H_NIOKI_
           ON GRUME_H_NIOKI_.ID_GRUME_H = HIST_GRUME_H_NIOKI_.ID_GRUME_H
where
HIST_GRUME_H_NIOKI_.ID_GRUME_H = GRUME_H_NIOKI_.ID_GRUME_H
and
GRUME_H_NIOKI_.n_abat
Like 460

autant de doublons que de registre ds la table2

meme que j'ai aussi renversé
where
GRUME_H_NIOKI_.ID_GRUME_H = HIST_GRUME_H_NIOKI_.ID_GRUME_H
et rien a faire...!!!
mardi 12 août 2008 à 19:39:59 | Re : Comment supprimer doublons s/ inner join

casy

Membre Club
Oui, mais c'est normal.

La condition que tu as ajouter dans le where ne sert à rien puisque c'est celle de la jointure et c'est cette dernière qui l'assure déjà.

Donc ta requette maintenant est identique à la précédente.

Tel que tu pose ton problème, c'est le fonctionnement normal de la jointure que tu obtiens. Et dans ce sens là, il n'y a pas de doublons.

Si tu as trop de résultats, il faut que tu filtre les enregistrements de la table 2 sur d'autres critères (pas l'id de ta jointure, mais d'autres colonnes de ta table 2)


---- Sevyc64  (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #    [ Lien ]
jeudi 14 août 2008 à 00:44:50 | Re : Comment supprimer doublons s/ inner join

810mcu

Tu as tout a fait raison Casy,
ma Table2 avait qq problèmes, je me suis rendu compte…
Des fois on focalise sur qq chose et le problème est ailleurs

2eme volet, là très franchement ne n’est aucune idée, et je ne sais pas si cella est possible de le faire via SQL(query) !!!

J’ai un peut compléter mon query, que voici
[CODE]SELECT GRUME_H_NIOKI_.ID_GRUME_H,
        GRUME_H_NIOKI_.N_ABAT,
GRUME_H_NIOKI_.L_ABAT,  
GRUME_H_NIOKI_.ESSENCE,
GRUME_H_NIOKI_.D_SAVE,
GRUME_H_NIOKI_.B_SAVE,
GRUME_H_NIOKI_.CORRESPOND,
GRUME_H_NIOKI_.PERMIS,
GRUME_H_NIOKI_.CHANTIER,
GRUME_H_NIOKI_.N_EXPORT,
Count(HIST_GRUME_H_NIOKI_.ID_HIST_GRUNE_H) AS Nombre FROM GRUME_H_NIOKI_
INNER JOIN HIST_GRUME_H_NIOKI_ ON GRUME_H_NIOKI_.ID_GRUME_H = HIST_GRUME_H_NIOKI_.ID_GRUME_H
Where
HIST_GRUME_H_NIOKI_.POSITION
Like 'GARE'
GROUP BY GRUME_H_NIOKI_.ID_GRUME_H,
GRUME_H_NIOKI_.N_ABAT,
GRUME_H_NIOKI_.L_ABAT,
GRUME_H_NIOKI_.ESSENCE,
GRUME_H_NIOKI_.D_SAVE,
GRUME_H_NIOKI_.B_SAVE,
GRUME_H_NIOKI_.CORRESPOND,
GRUME_H_NIOKI_.PERMIS,
GRUME_H_NIOKI_.CHANTIER,
GRUME_H_NIOKI_.N_EXPORT[/CODE]
Jusque là ok exécution parfaite, je me retrouve avec
1 ligne Table1
et n lignes Table2

Est-ce possible tj avec le même query, parcourir tous les lignes Table1 d’aller a la dernière ligne de la Table2(correspondante ligne Table1) est procéder a la vérification de ces données,
[CODE]Where
HIST_GRUME_H_NIOKI_.POSITION
Like 'GARE'[/CODE]
Merci...,
jeudi 14 août 2008 à 10:10:05 | Re : Comment supprimer doublons s/ inner join

810mcu

Bonjour,
Oui avec une boucle ( while ou for) cela serais possible, oui boulot d'un programme.
Mais d’un autre cote cela serait aussi possible via un (query, SQL) ???

Quelque chose du genre
Qu'appelles-tu 'vérification de ces données' ?
-Table1 GRUME_H_NIOKI_.ID_GRUME_H,
--Table2 sélectionne les lignes avec ID_GRUME_H
---Va a la dernière ligne est vérifie si celle si
----(HIST_GRUME_H_NIOKI_.POSITION égal 'GARE')
-----Si oui le query le garde
-----Si non le query le rejette

-Suivant...
dimanche 17 août 2008 à 21:47:08 | Re : Comment supprimer doublons s/ inner join

casy

Membre Club
"...dernière ligne de la Table2..."

Le terme 'dernière ligne' ne veut rien dire en terme de base de données
En fait il faut que tu précise dans ta requette un ordre de tri (ORDER BY) sur un ou plusieurs champs (une date par exemple) pour pouvoir ensuite parler effectivement de première ou dernière ligne.

Ensuite si tu tri ton résultat selon un ordre, et que tu veux la dernière ligne, tu peux tout aussi bien trier dans l'ordre inverse et vouloir donc par conséquent la première ligne.
Dans cette hypothèse, tu peux faire en sorte avec une requette style SELECT TOP 1 de ne retourner alors que le tout premier résultat.

Donc faire une requette SELECT * ... ORDER BY ... de sorte à ce que la ligne qui t'interresse soit retournée en premier.
Modifier ta requette en SELECT TOP1 * ... ORDER BY, pour ne retourner finalement que cette ligne qui t'interresse.

"...parcourir tous les lignes Table1 d?aller a la dernière ligne de la Table2(correspondante ligne Table1)..."
Oui effectivement avec une boucle. Il faut faire une première requette sur la table 1, puis avec une boucle sur chacun des résultats de la première requette, faire la seconde comme je viens de te l'expliquer.

Le faire en une seule requette ?
Je dirais qu'à priori cela doit etre possible, mais un peu plus compliquer. Je ne peux pas te donner de solutions comme ça. Il me faudrait faire des tests au préalable et je n'ai pas de données sous la main.

L'idée serait de remplacer, je pense, dans la jointure, la table 2 par le résultat de la requette sur cette table.

---- Sevyc64  (alias Casy) ----

1 2

Cette discussion est classée dans : doublons, inner, hist, grume, nioki


Répondre à ce message

Sujets en rapport avec ce message

éléiminatio des doublons : instruction delete avec jointure [ par overider ] Bonjour à tousje souhaite eliminer les doublons dans un table.J'ai d'abord rechercher les doublons (merci a kechia pour sa requette) puis je les ai st probleme de champ ntext avec group by [ par nashouille ] Bonjour a tousdans une requete avec une sous requete d'agregation, l'extraction d'un champ ntext est impossible.sql server me retourne ce messageServe Doublons [ par piep14 ] Bonjour, j'aimerais savoir s'il est possible d'extraire directement dans la base de données tous les doublons ! Merci le forum pb requette doublons [ par skiso ] cette requette me sort des doublons :SELECT * FROM agences a inner join annonces b on a.AGENCE = b.AGENCE WHERE a.commune='$com'comment faire pour ne Suppression doublons... [ par billut ] salut a tous, voila je vous explique vite faitca fais quelques temps que je galere sur une requete toute simple, mais la jen peux plus, jai cherché su Requete sans doublons [ par aztcaLISS ] Salut, Je voudrais faire une requete sur ma base de données. J'ai une Table qui contient 3 champs: Test1, Test2, Test3.Je voudrais obtenir une nouve affichage doublons [ par EFFACEUR ] Je voudrais afficher tt les lignes ayant un doublons pour pouvoir verifier lequel supprimerSELECT nom as valeur,COUNT(*) FROM table GROUP BY valeur HA Doublons dans INNER JOIN [ par leviz ] Hello! Voila mon problème : J'ai deux tables : TblCollectList et TblCollectNotes</fo INNER JOIN sur 3 tables [ par citt ] Bonjour, Je fait une requete SQL sur 4 tables pour avoir le nombre d'element en tous Ex : table : ecrou (environ 200 enreg) table : ecrou_petit (envir Grouper les doublons [ par pkmnlio ] Bonjour,Je suis entrain de develloper un site en ASP, et j'ai un petit probleme avec une de mes requetes de selection.J'ai une liste de Dvds dans une


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales