OVH Cloud OVH Cloud

pour une requete

8 réponses
Avatar
Jean-Michel PERRIERE
Bonjour,

Comment faire une requete qui selectionne une liste de tous les numeros
d'une table SAUF ceux present dans la liste d'une autre table !

Merci d'avance !

Exemple :

TABLE1 : Champs1

1
2
3
4
5
6

TABLE2 : Champs2

2
3

Je veux que le resultat soit

1
4
5
6


Merci !!!!

8 réponses

Avatar
3stone
Salut,

"Jean-Michel PERRIERE"
| Comment faire une requete qui selectionne une liste de tous les numeros
| d'une table SAUF ceux present dans la liste d'une autre table !
|
| Merci d'avance !
|
| Exemple :
|
| TABLE1 : Champs1
|
| 1
| 2
| 3
| 4
| 5
| 6
|
| TABLE2 : Champs2
|
| 2
| 3
|
| Je veux que le resultat soit
|
| 1
| 4
| 5
| 6


Je nomme les champs "ID" dans chaque table, à toi d'adapter:

SELECT T_Table1.ID, T_Table2.ID
FROM T_Table1 LEFT JOIN T_Table2 ON T_Table1.ID = T_Table2.ID
WHERE (((T_Table2.ID) Is Null));

Dans le requêteur graphique, tu sélectionne les deux tables,
glisse les deux champs sur la grille et crée une relation entre ces deux
champs (si elle n'existe pas encore)
Clique sur le trait qui représente la relation et choisi :
"tous de la table1 et seulement seulement ceux qui... de la table2"
Comme critère sous le champ de la table2, tu mets : Is Null

Et go !


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Email : http://www.cerbermail.com/?Xfg61Z3IQw
Avatar
Eric
Bonjour Jean-Michel,

Ou encore :
SELECT Numero from Table1
WHERE Numero NOT IN (SELECT Numero from Table2)
à copier dans la fenêtre SQL et en adaptant le nom des champs et tables.

Bonjour Pierre(3Stone):
Left Join vs Not In(Select ...)
En terme de temps de réponse, quelle est la requête la plus rapide ?
Merci


Bonjour,

Comment faire une requete qui selectionne une liste de tous les numeros
d'une table SAUF ceux present dans la liste d'une autre table !

Merci d'avance !

--

A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Jessy Sempere [MVP]
Bonjour

Ca c'est la question qui tue... ;-)))
Il serait interressant de faire un test effectivement.

Si tu veux, tu peux utiliser cette fonction pour faire un test
et comparer les résultats :

**************************************************
Public Function TimeOfQuery(strQuery As String, Optional lngX As Long = 1)
As Long
'** Fonction permettant de tester le temps
'** d'exécution d'une requête

Dim sngStart As Single
Dim sngEnd As Single
Dim i As Long

sngStart = Timer
For i = 1 To lngX
DoCmd.OpenQuery strQuery
DoCmd.Close acQuery, strQuery
Next
sngEnd = Timer
TimeOfQuery = (sngEnd * 1000) - (sngStart * 1000)
End Function
**************************************************

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Eric" a écrit dans le message news:
#
Bonjour Jean-Michel,

Ou encore :
SELECT Numero from Table1
WHERE Numero NOT IN (SELECT Numero from Table2)
à copier dans la fenêtre SQL et en adaptant le nom des champs et tables.

Bonjour Pierre(3Stone):
Left Join vs Not In(Select ...)
En terme de temps de réponse, quelle est la requête la plus rapide ?
Merci


Bonjour,

Comment faire une requete qui selectionne une liste de tous les numeros
d'une table SAUF ceux present dans la liste d'une autre table !

Merci d'avance !

--

A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr



Avatar
Eric
Bonjour Jessy,

Merci pour le bout de code, je n'avais pas eu le courage de l'écrire.
C'est l'été ;-) , ce genre de chose, je le garde pour les mauvais jours,
période de grisaille, mornes dimanches ... :-(

Je n'ai sous la main que de petites tables de 1500-2000 enregistrements.

Le Left Join est globalement 4 fois + rapide que le not in (select ....)
(test fait sur 200 enregistrements)

Pour ceux qui auraient le courage de tester sur des millions
d'enregistrements, il serait intéressant d'avoir un meilleur ordre de
grandeur.

Bonjour

Ca c'est la question qui tue... ;-)))
Il serait interressant de faire un test effectivement.




--
A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
3stone
Salut Eric,

"Eric"
[...]
| Le Left Join est globalement 4 fois + rapide que le not in (select ....)
| (test fait sur 200 enregistrements)


... ce qui répond à ta question ;-)

En fait, il y a... longtemps, il y eu une discussion à ce sujet, ici.



J'ai eu la chance de mémoriser...

une autre, de la même famille :
http://users.skynet.be/accesshome/ah_requete_optimisation.htm



--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Email : http://www.cerbermail.com/?Xfg61Z3IQw
Avatar
Eric
Bonjour Pierre,

Salut Eric,

En fait, il y a... longtemps, il y eu une discussion à ce sujet, ici.

J'ai eu la chance de mémoriser...


Veinard, moi je la perds ...


une autre, de la même famille :
http://users.skynet.be/accesshome/ah_requete_optimisation.htm


Bon, comme me l'a déja fait remarqué Pierre(CFI),

je ne réponds plus après toi ;-)
--
A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
3stone
Salut Eric,

"Eric"
| Bon, comme me l'a déja fait remarqué Pierre(CFI),
| je ne réponds plus après toi ;-)



Meu si ! Te retiens surtout pas !!!

Si je te montrai la liste (que je garde précieusement) du nombre de fois
que le même Pierre CFI à dit que je recontais des couenneries!
J'en ai gravé 3 CD, jusqu'à maintenant...

:o)


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Email : http://www.cerbermail.com/?Xfg61Z3IQw
Avatar
Jean-Michel PERRIERE
merci, je vais essayer
"3stone" a écrit dans le message de news:
uI4p1%
Salut,

"Jean-Michel PERRIERE"
| Comment faire une requete qui selectionne une liste de tous les numeros
| d'une table SAUF ceux present dans la liste d'une autre table !
|
| Merci d'avance !
|
| Exemple :
|
| TABLE1 : Champs1
|
| 1
| 2
| 3
| 4
| 5
| 6
|
| TABLE2 : Champs2
|
| 2
| 3
|
| Je veux que le resultat soit
|
| 1
| 4
| 5
| 6


Je nomme les champs "ID" dans chaque table, à toi d'adapter:

SELECT T_Table1.ID, T_Table2.ID
FROM T_Table1 LEFT JOIN T_Table2 ON T_Table1.ID = T_Table2.ID
WHERE (((T_Table2.ID) Is Null));

Dans le requêteur graphique, tu sélectionne les deux tables,
glisse les deux champs sur la grille et crée une relation entre ces deux
champs (si elle n'existe pas encore)
Clique sur le trait qui représente la relation et choisi :
"tous de la table1 et seulement seulement ceux qui... de la table2"
Comme critère sous le champ de la table2, tu mets : Is Null

Et go !


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Email : http://www.cerbermail.com/?Xfg61Z3IQw