OVH Cloud OVH Cloud

Sous-requête

5 réponses
Avatar
Mona
Bonjour,

Est-ce que c'est normal qu'avec Access, lorsque je tente de faire une
sous-requête entrelacées ca ne marche pas?

SELECT *
FROM t1
WHERE EXISTS (
SELECT *
FROM t2
WHERE t1.id1 = t2.id1
AND t1.id2 = t2.id2);

Sachant que id1 et id2 sont deux champs de t1 et de t2. Access prend t1.id1
et t1.id2 comme des variables et me demande d'entrer les valeurs à la main!
Je sais qu'avec la plupart des autres SGBD ca marche. Avec access on dirait
que ca ne marche pas?!

Si c'est vrai que ca ne marche pas? Quoi faire pour avoir le même résultat?

Merci

5 réponses

Avatar
Raymond [mvp]
Bonjour.

moi, je ferais simplement ça:
SELECT table1.*
FROM table1 INNER JOIN table2 ON (table1.id1 = table2.id1 ) AND (table1.id2
= table2.id2 );

ça devrait sortir les mêmes enregistrements.
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Mona" <m_yazbeck(ZZZ)@hotmail.com> a écrit dans le message de news:

Bonjour,

Est-ce que c'est normal qu'avec Access, lorsque je tente de faire une
sous-requête entrelacées ca ne marche pas?

SELECT *
FROM t1
WHERE EXISTS (
SELECT *
FROM t2
WHERE t1.id1 = t2.id1
AND t1.id2 = t2.id2);

Sachant que id1 et id2 sont deux champs de t1 et de t2. Access prend
t1.id1
et t1.id2 comme des variables et me demande d'entrer les valeurs à la
main!
Je sais qu'avec la plupart des autres SGBD ca marche. Avec access on
dirait
que ca ne marche pas?!

Si c'est vrai que ca ne marche pas? Quoi faire pour avoir le même
résultat?

Merci




Avatar
Mona
J'avais oublié de préciser que c'était pour faire un DELETE (donc ca ne
marche pas avec les JOIN) ..

Merci

"Raymond [mvp]" a écrit dans le message de
news:
Bonjour.

moi, je ferais simplement ça:
SELECT table1.*
FROM table1 INNER JOIN table2 ON (table1.id1 = table2.id1 ) AND
(table1.id2

= table2.id2 );

ça devrait sortir les mêmes enregistrements.
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Mona" <m_yazbeck(ZZZ)@hotmail.com> a écrit dans le message de news:

Bonjour,

Est-ce que c'est normal qu'avec Access, lorsque je tente de faire une
sous-requête entrelacées ca ne marche pas?

SELECT *
FROM t1
WHERE EXISTS (
SELECT *
FROM t2
WHERE t1.id1 = t2.id1
AND t1.id2 = t2.id2);

Sachant que id1 et id2 sont deux champs de t1 et de t2. Access prend
t1.id1
et t1.id2 comme des variables et me demande d'entrer les valeurs à la
main!
Je sais qu'avec la plupart des autres SGBD ca marche. Avec access on
dirait
que ca ne marche pas?!

Si c'est vrai que ca ne marche pas? Quoi faire pour avoir le même
résultat?

Merci








Avatar
Raymond [mvp]
ça n'a strictement rien à voir.
donc, tu veux supprimer les enregistrements de la table1 qui sont présents
dans la table2 ?
finalement il serait préférable que tu précises exactement ce que tu veux
faire et dans quelle table.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Mona" <m_yazbeck(ZZZ)@hotmail.com> a écrit dans le message de news:

J'avais oublié de préciser que c'était pour faire un DELETE (donc ca ne
marche pas avec les JOIN) ..

Merci


Avatar
Mona
Bonjour,

Je veux supprimer les enregistrements de la table1 qui ont la même clé
(id1 - id2) que les enregistrement de t2 (qui en fait est une requête fait à
partir de deux autres requêtes)

Est-ce que c'est plus clair?

Quand j'essaie le DELETE avec les JOIN, ca ne fonctionne pas car on ne peut
faire des DELETE juste quand il y a une seule table. Donc avec le IN ou le
EXISTS ca fonctionne. Sauf que mon problème maintenant c'est que avec la
requête que j,ai mis dans mon premier POST, ca ne me retourne jamais le même
nombre d'enregistrement et ca prend 30 minutes à rouler...!



"Raymond [mvp]" a écrit dans le message de
news:
ça n'a strictement rien à voir.
donc, tu veux supprimer les enregistrements de la table1 qui sont présents
dans la table2 ?
finalement il serait préférable que tu précises exactement ce que tu veux
faire et dans quelle table.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Mona" <m_yazbeck(ZZZ)@hotmail.com> a écrit dans le message de news:

J'avais oublié de préciser que c'était pour faire un DELETE (donc ca ne
marche pas avec les JOIN) ..

Merci







Avatar
Raymond [mvp]
Il te faut faire le contraire
tu crées une requête de non correspondance/création de table et tu ne
retrouveras que les enregistrements n'existant pas dans la table 2.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Mona" <m_yazbeck(ZZZ)@hotmail.com> a écrit dans le message de news:

Bonjour,

Je veux supprimer les enregistrements de la table1 qui ont la même clé
(id1 - id2) que les enregistrement de t2 (qui en fait est une requête fait
à
partir de deux autres requêtes)

Est-ce que c'est plus clair?

Quand j'essaie le DELETE avec les JOIN, ca ne fonctionne pas car on ne
peut
faire des DELETE juste quand il y a une seule table. Donc avec le IN ou le
EXISTS ca fonctionne. Sauf que mon problème maintenant c'est que avec la
requête que j,ai mis dans mon premier POST, ca ne me retourne jamais le
même
nombre d'enregistrement et ca prend 30 minutes à rouler...!