[access]petit souci tout bete de requete sql...

petit souci tout bete de requete sql... [access] - SQL/NoSQL - Programmation

Marsh Posté le 13-06-2003 à 10:00:52    

Bonjour,
 
voilà, j'ai 2 tables, A et B, qui contiennent des entrées communes. Je voudrais récupérer toutes les entrées de chaque, sans les entrées qui sont dans les deux tables...
 
Ca fait une heure que je cherche, et IMPOSSIBLE de remettre la main sur la syntaxe :/
 
Pour l'instant ma requete ressemble à ca, mais il manque un truc....
 

SELECT DISTINCT [A].[NU SAL], [A].[NOM PRENOM], [A].AD1, [A].AD2, [A].AD3, [A].CODEPOST, [A].COMMUNE, entreprises.[NU ENT], entreprises.[LIBELLE ENT]
FROM entreprises, A
WHERE (((entreprises.[NU ENT])=[A]![NU ENT]));


 
Qqun peut me donner un petit coup de main ?
 
 :hello:


---------------
Filmstory : gardez trace des films que vous avez vu ! :D
Reply

Marsh Posté le 13-06-2003 à 10:00:52   

Reply

Marsh Posté le 13-06-2003 à 10:02:58    

Si tu veux TOUTES les données des deux tables sans les doublons :
 
SELECT * FROM A
UNION
SELECT * FROM B
 
Si tu veux seulement les lignes différentes :
 
SELECT * FROM A
WHERE ID NOT IN (SELECT ID FROM B)
UNION
SELECT * FROM B
WHERE ID NOT IN (SELECT ID FROM A)

Reply

Marsh Posté le 13-06-2003 à 10:08:40    

J'avais fait un truc comme ca tt à l'heure déjà... :/
La requête ressemble à ca maintenant:
 

SELECT DISTINCT [A].[NU SAL], [A].[NOM PRENOM], [A].AD1, [A].AD2, [A].AD3, [A].CODEPOST, [A].COMMUNE, entreprises.[NU ENT], entreprises.[LIBELLE ENT]
FROM entreprises, A, B
WHERE (((entreprises.[NU ENT])=[A]![NU ENT]))
AND [A]![NU SAL] NOT IN (SELECT [B].[NU SAL] FROM B);


 
edit:Ca s'exécute, mais c DINGUE comment c'est lent !! Ca fait plus d'une minute que ca tourne, et toujours pas fini [:totoz]


Message édité par freds45 le 13-06-2003 à 10:13:08

---------------
Filmstory : gardez trace des films que vous avez vu ! :D
Reply

Marsh Posté le 13-06-2003 à 15:55:16    

NOT IN est très lent, parceque pour chaque ligne contenue dans cette clause, il va falloir vérifier son existence dans chaque ligne contenue dans la requête.
 
Grossomodo :
 
A : 100 000 lignes
B : 100 000 lignes
 
=> select ID from A where ID not in (select ID from B)
Ca va faire : 100 000 * 100 000 lignes à tester.

Reply

Marsh Posté le 13-06-2003 à 15:57:17    

PS: t'es sûr que tu as besoin du DISCTINCT ?
 
Parceque le distinct ça vaut pas mieu que NOT IN (c'est même pire, parceque au lieu de porter sur un champ unique par ligne, ça porte sur tout les champs de toutes les lignes...
 
=> Nécessité de parcourir l'intégralité des données avant de retourner le résultat, index ou pas. (alors que le not in et un index bien placé, tu ne lis même pas les données dans les tables...)

Reply

Marsh Posté le 13-06-2003 à 17:07:38    

bon finalement je m'en suis sorti :)
La méthode était peut être un peu lente :whistle:, mais pour un besoin poncutel ca a été :wahoo:


---------------
Filmstory : gardez trace des films que vous avez vu ! :D
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed