Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1623 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  SQL - dédoublonnage

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

SQL - dédoublonnage

n°1211683
gdrara
Posté le 30-09-2005 à 14:18:07  profilanswer
 

Salut à tous,
 
Ci joint un code qui permet de sortir tous les champs de deux tables, qui ont la valeur email égales (code de access, d'où le sql un peu douteux)
 
SELECT [E-mail_clubistes].[E-mail], [E-mail_clubistes].[Code postal]  
FROM [E-mail_clubistes] INNER JOIN [Jeux magny cours] ON [E-mail_clubistes].[E-mail] = [Jeux magny cours].[E-mail];
 
Ca marche nickel mais voici ma question : peut on le faire sur 3 ou 4 tables en même temps ? Et si oui, comment ?
 
Merci bcp

mood
Publicité
Posté le 30-09-2005 à 14:18:07  profilanswer
 

n°1211740
sircam
I Like Trains
Posté le 30-09-2005 à 14:50:27  profilanswer
 

Beh oui : JOIN ... ON ... JOIN ... ON .. JOIN ... ON ...
 
Enfin, selon le DBMS.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1216860
orafrance
Posté le 06-10-2005 à 17:15:20  profilanswer
 
n°1217201
Arjuna
Aircraft Ident.: F-MBSD
Posté le 07-10-2005 à 00:42:26  profilanswer
 

perso, je préfère la syntaxe qui passe partout et que je trouve plus lisible :
 
select ...
from table1, table2, ..., tablen
where table1.fk = table2.pk
and table2.fk = tableX.pk
...
and tableY.fk = tablen.pk

n°1225381
gdrara
Posté le 18-10-2005 à 14:31:08  profilanswer
 

Salut,
Merci bcp pour ces conseils. Par contre, cette requette me sort les enregistrements communs à toutes les tables. Or je souhaiterai les enregistrements inverses : les valeurs qui ne sont pas communes aux tables.  
Please help me ;-)

n°1225504
backdafuck​up
Back to da old skool
Posté le 18-10-2005 à 16:02:27  profilanswer
 

voici :  
 
select *
from table1
where table1.col1 NOT IN (select col1 FROM table2)
 
etc etc si tu veux le faire sur plusieurs tables...

n°1225513
Arjuna
Aircraft Ident.: F-MBSD
Posté le 18-10-2005 à 16:13:13  profilanswer
 

fait des left join et une série de OR portant sur chaque élément des jointures avec "is null"
 
genre, dans ton exemple du dessus :
 
([E-mail_clubistes].[E-mail] is null or [Jeux magny cours].[E-mail] is null)

n°1225606
gdrara
Posté le 18-10-2005 à 17:54:29  profilanswer
 

yes, ca marche, sauf que je n'ai que les enregistrements de la première table et qui ne sont pas dans la deuxième. Il me manque les enregistrements de la seconde table qui ne sont pas dans la première.
T'as une idée ?

n°1225686
Arjuna
Aircraft Ident.: F-MBSD
Posté le 18-10-2005 à 19:27:26  profilanswer
 

ok, alors essaie ça :
 

Code :
  1. SELECT [E-mail_clubistes].[E-mail], [E-mail_clubistes].[Code postal] 
  2. FROM [E-mail_clubistes] LEFT JOIN [Jeux magny cours] ON [E-mail_clubistes].[E-mail] = [Jeux magny cours].[E-mail]
  3. where [Jeux magny cours].[E-mail] is null
  4. union
  5. SELECT [E-mail_clubistes].[E-mail], [E-mail_clubistes].[Code postal] 
  6. FROM [E-mail_clubistes] RIGHT OUTER JOIN [Jeux magny cours] ON [E-mail_clubistes].[E-mail] = [Jeux magny cours].[E-mail]
  7. where [E-mail_clubistes].[E-mail] is null;


 
=> Si le "RIGHT OUTER JOIN" marche pas, interverti les deux tables et utilise "LEFT JOIN".
 
Si MySQL supporte le FULL JOIN ou FULL OUTER JOIN (PostGre le supporte, mais c'est plutôt rare) alors tu peux aussi faire :
 

Code :
  1. SELECT [E-mail_clubistes].[E-mail], [E-mail_clubistes].[Code postal] 
  2. FROM [E-mail_clubistes] FULL OUTER JOIN [Jeux magny cours] ON [E-mail_clubistes].[E-mail] = [Jeux magny cours].[E-mail]
  3. where [E-mail_clubistes].[E-mail] is null or [Jeux magny cours].[E-mail] is null;


 
L'intérêt d'un FULL OUTER JOIN, c'est que si t'as 25 tables, tu fais tes 25 jointures et t'as pas besoin de faire 25 union :D
 
Sinon, si c'est une version de MySQL récente, tu peux aussi faire :
 

Code :
  1. SELECT *
  2. FROM [E-mail_clubistes] a, [Jeux magny cours] b
  3. WHERE NOT EXISTS (select null from [E-mail_clubistes] c where b.[E-mail] = c.[E-mail]) and NOT EXISTS (select null from [Jeux magny cours] d where a.[E-mail] = d.[E-mail])

n°1225687
Arjuna
Aircraft Ident.: F-MBSD
Posté le 18-10-2005 à 19:28:02  profilanswer
 

Comme tu peux voir, y'a toujours 25 solutions pour arriver au bon résultat, ensuite reste à savoir quelle solution offre le meilleur compromis support/rapidité :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  SQL - dédoublonnage

 

Sujets relatifs
[Access / SQL / SGBD] Evenement clic sur controle onglet ! help plzopérations sur des alias SQL
definir une clé primaire apres la creation d'une table, en SQLAdditionner les résultat de deux requêtes SQL en access SQL
[SQL] Petit problème -> ...not contained in an aggregate function...probleme installation SQL Server 2000
[SQL Server] Enlever une contrainte IDENTITY d'une table?SQL et VBA
Problème de syntaxe SQL ???Recuperer plusieurs ROWS SQL avec une fonction PHP ?
Plus de sujets relatifs à : SQL - dédoublonnage


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR