petit souci tout bete de requete sql... [access] - SQL/NoSQL - Programmation
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)
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] |
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
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.
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...)
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 , mais pour un besoin poncutel ca a été
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 ?
---------------
Filmstory : gardez trace des films que vous avez vu ! :D