[aide] Requete SQL ....

Le
Serge Metzger
Bonjour a tous ,

J'ai du mal avec une requête SQL sous MS Access. J'explique :
3 tables jointes :

Table : CIRCUIT
- NumCircuit (integer)
- Libelle (String)
- EstUtilisé (bool)

Table : LIEN_CIRCUIT_ENGIN
- NumCircuit (integer)
- NumEngin (integer)

Table : ENGIN
- NumEngin (Integer)
- Libelle (string)
- EstUtilisé (bool)

La relation est construite de sorte à avoir "N" ENGIN pour un CIRCUIT et
pour chaque ENGIN les "N" CIRCUIT qui l'utilise.
(plusieurs cicuit utilisent les mêmes engin : le nombre d'engin utilisé par
un circuit n'eset pas déterminé a priori)

La requête que je cherche doit permettre de trouver la liste des CIRCUIT qui
ne sont pas utilisé et dont AUCUN ENGIN associé n'est utilisé.

La requête actuelle (qui ne fonctionnement pas encore) est la suivante :
SELECT Circuit.*
FROM Circuit RIGHT JOIN (LienCircuitEngin RIGHT JOIN Engin ON
LienCircuitEngin.NumEngin=Engin.NumOrdre) ON
Circuit.NumOrdre=LienCircuitEngin.NumCircuit
WHERE Circuit.IsInUse = false and
Engin.NumOrdre in (SELECT Engin.NumOrdre
FROM Engin LEFT JOIN
( LienCircuitEngin LEFT JOIN Circuit ON LienCircuitEngin.NumEngin =
Circuit.NumOrdre ) ON Engin.NumOrdre = LienCircuitEngin.NumEngin
WHERE
engin.IsInUselse and Circuit.NumOrdre = Circuit.NumOrdre);

Il me manque de pouvoir synchroniser la sous requête à la requête principale
. et là je sèche.
Merci par avance pour vos conseils.



-
Cordiales salutations.

Serge METZGER
metzger@simec-sa.com
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
phil
Le #4635261
Normalement, dans ta table LIEN_CIRCUIT_ENGIN, tu ne dois
avoir que les couples engin-circuit. C'est-à-dire que si
on a le couple engin numéro 1 circuit numéro 5, on est sûr
que le circuit numéro 5 a l'engin 1, et que l'engin 1 est
sur le numéro 5.
Si c'est bien come ça, je pense que cette requête pourrait
faire l'affaire :

SELECT NumCircuit
FROM CIRCUIT
WHERE NumCircuit NOT IN
(SELECT NumCircuit
FROM LIEN_CIRCUIT_ENGIN);

Ainsi, la requête imbriquée (entre parenthèses) cherche
les circuits qui ont au moins un engin. La requête
principale aura la liste des circuits et enlèvera ceux qui
ont au moins un engin. Il restera ceux qui n'en ont pas...
Et voilà!


-----Message d'origine-----
Bonjour a tous ,

J'ai du mal avec une requête SQL sous MS Access.
J'explique :

3 tables jointes :

Table : CIRCUIT
- NumCircuit (integer)
- Libelle (String)
- EstUtilisé (bool)

Table : LIEN_CIRCUIT_ENGIN
- NumCircuit (integer)
- NumEngin (integer)

Table : ENGIN
- NumEngin (Integer)
- Libelle (string)
- EstUtilisé (bool)

La relation est construite de sorte à avoir "N" ENGIN
pour un CIRCUIT et

pour chaque ENGIN les "N" CIRCUIT qui l'utilise.
(plusieurs cicuit utilisent les mêmes engin : le nombre
d'engin utilisé par

un circuit n'eset pas déterminé a priori)

La requête que je cherche doit permettre de trouver la
liste des CIRCUIT qui

ne sont pas utilisé et dont AUCUN ENGIN associé n'est
utilisé.


La requête actuelle (qui ne fonctionnement pas encore)
est la suivante :

SELECT Circuit.*
FROM Circuit RIGHT JOIN (LienCircuitEngin RIGHT JOIN
Engin ON

LienCircuitEngin.NumEngin=Engin.NumOrdre) ON
Circuit.NumOrdre=LienCircuitEngin.NumCircuit
WHERE Circuit.IsInUse = false and
Engin.NumOrdre in (SELECT Engin.NumOrdre

FROM Engin LEFT JOIN

( LienCircuitEngin LEFT JOIN Circuit ON
LienCircuitEngin.NumEngin =

Circuit.NumOrdre ) ON Engin.NumOrdre =
LienCircuitEngin.NumEngin

WHERE
engin.IsInUselse and Circuit.NumOrdre =
Circuit.NumOrdre);


Il me manque de pouvoir synchroniser la sous requête à la
requête principale

..... et là je sèche....
Merci par avance pour vos conseils.



-
Cordiales salutations.

Serge METZGER




.



Serge Metzger
Le #4635211
déjà cette info me permet de simplifier la requête ...quoi que ...
mais ce n'est pas encore ça ... pour chaque circuit j'ai en moyenne 15 engin
(de 10 à 20 par exemple) et je veux connaître les circuits qui ont tous leur
engin de disponible sachant qu'un autre circuit en cours d'utilisation
utilise certains engin utilisé dans d'autre circuit. (Plusieurs circuits ont
des engins en commun et et un engin en cours d'utilisation ne peut-être
utilisé que par un circuit à la fois)

en fait, si j'ai à l'instant T le circuit 1 qui utilise les engin 1,3,7,9
d'actif ... tous les circuits qui utilisent l'un des engin 1,3,7,9 ne
peuvent être sélectionnés ...


merci pour d'autre idées ..
Cordiales salutations.
Serge METZGER



"phil" news:0af501c3d5ee$a72246c0$
Normalement, dans ta table LIEN_CIRCUIT_ENGIN, tu ne dois
avoir que les couples engin-circuit. C'est-à-dire que si
on a le couple engin numéro 1 circuit numéro 5, on est sûr
que le circuit numéro 5 a l'engin 1, et que l'engin 1 est
sur le numéro 5.
Si c'est bien come ça, je pense que cette requête pourrait
faire l'affaire :

SELECT NumCircuit
FROM CIRCUIT
WHERE NumCircuit NOT IN
(SELECT NumCircuit
FROM LIEN_CIRCUIT_ENGIN);

Ainsi, la requête imbriquée (entre parenthèses) cherche
les circuits qui ont au moins un engin. La requête
principale aura la liste des circuits et enlèvera ceux qui
ont au moins un engin. Il restera ceux qui n'en ont pas...
Et voilà!


-----Message d'origine-----
Bonjour a tous ,

J'ai du mal avec une requête SQL sous MS Access.
J'explique :

3 tables jointes :

Table : CIRCUIT
- NumCircuit (integer)
- Libelle (String)
- EstUtilisé (bool)

Table : LIEN_CIRCUIT_ENGIN
- NumCircuit (integer)
- NumEngin (integer)

Table : ENGIN
- NumEngin (Integer)
- Libelle (string)
- EstUtilisé (bool)

La relation est construite de sorte à avoir "N" ENGIN
pour un CIRCUIT et

pour chaque ENGIN les "N" CIRCUIT qui l'utilise.
(plusieurs cicuit utilisent les mêmes engin : le nombre
d'engin utilisé par

un circuit n'eset pas déterminé a priori)

La requête que je cherche doit permettre de trouver la
liste des CIRCUIT qui

ne sont pas utilisé et dont AUCUN ENGIN associé n'est
utilisé.


La requête actuelle (qui ne fonctionnement pas encore)
est la suivante :

SELECT Circuit.*
FROM Circuit RIGHT JOIN (LienCircuitEngin RIGHT JOIN
Engin ON

LienCircuitEngin.NumEngin=Engin.NumOrdre) ON
Circuit.NumOrdre=LienCircuitEngin.NumCircuit
WHERE Circuit.IsInUse = false and
Engin.NumOrdre in (SELECT Engin.NumOrdre

FROM Engin LEFT JOIN

( LienCircuitEngin LEFT JOIN Circuit ON
LienCircuitEngin.NumEngin >Circuit.NumOrdre ) ON Engin.NumOrdre LienCircuitEngin.NumEngin

WHERE
engin.IsInUseúlse and Circuit.NumOrdre Circuit.NumOrdre);

Il me manque de pouvoir synchroniser la sous requête à la
requête principale

..... et là je sèche....
Merci par avance pour vos conseils.



-
Cordiales salutations.

Serge METZGER




.



phil
Le #4635151
Essaye avec cette requête. J'ai testé, ça devrait
fonctionner si j'ai bien compris ce que tu m'as dit...

SELECT DISTINCT c.numcircuit
FROM Circuit AS c, Lien_Circuit_engin AS l
WHERE c.Numcircuit=l.numcircuit
and estutilisélse
and (select count(l.numengin)
from lien_circuit_engin l)=
(select count(l.numengin)
from lien_circuit_engin l , engin e
where l.numengin=e.numengin
and e.estutilisélse);


-----Message d'origine-----


déjà cette info me permet de simplifier la
requête ...quoi que ...

mais ce n'est pas encore ça ... pour chaque circuit j'ai
en moyenne 15 engin

(de 10 à 20 par exemple) et je veux connaître les
circuits qui ont tous leur

engin de disponible sachant qu'un autre circuit en cours
d'utilisation

utilise certains engin utilisé dans d'autre circuit.
(Plusieurs circuits ont

des engins en commun et et un engin en cours
d'utilisation ne peut-être

utilisé que par un circuit à la fois)

en fait, si j'ai à l'instant T le circuit 1 qui utilise
les engin 1,3,7,9

d'actif ... tous les circuits qui utilisent l'un des
engin 1,3,7,9 ne

peuvent être sélectionnés ...


merci pour d'autre idées ..
Cordiales salutations.
Serge METZGER



"phil" le message de

news:0af501c3d5ee$a72246c0$
Normalement, dans ta table LIEN_CIRCUIT_ENGIN, tu ne dois
avoir que les couples engin-circuit. C'est-à-dire que si
on a le couple engin numéro 1 circuit numéro 5, on est sûr
que le circuit numéro 5 a l'engin 1, et que l'engin 1 est
sur le numéro 5.
Si c'est bien come ça, je pense que cette requête pourrait
faire l'affaire :

SELECT NumCircuit
FROM CIRCUIT
WHERE NumCircuit NOT IN
(SELECT NumCircuit
FROM LIEN_CIRCUIT_ENGIN);

Ainsi, la requête imbriquée (entre parenthèses) cherche
les circuits qui ont au moins un engin. La requête
principale aura la liste des circuits et enlèvera ceux qui
ont au moins un engin. Il restera ceux qui n'en ont pas...
Et voilà!


-----Message d'origine-----
Bonjour a tous ,

J'ai du mal avec une requête SQL sous MS Access.
J'explique :

3 tables jointes :

Table : CIRCUIT
- NumCircuit (integer)
- Libelle (String)
- EstUtilisé (bool)

Table : LIEN_CIRCUIT_ENGIN
- NumCircuit (integer)
- NumEngin (integer)

Table : ENGIN
- NumEngin (Integer)
- Libelle (string)
- EstUtilisé (bool)

La relation est construite de sorte à avoir "N" ENGIN
pour un CIRCUIT et

pour chaque ENGIN les "N" CIRCUIT qui l'utilise.
(plusieurs cicuit utilisent les mêmes engin : le nombre
d'engin utilisé par

un circuit n'eset pas déterminé a priori)

La requête que je cherche doit permettre de trouver la
liste des CIRCUIT qui

ne sont pas utilisé et dont AUCUN ENGIN associé n'est
utilisé.


La requête actuelle (qui ne fonctionnement pas encore)
est la suivante :

SELECT Circuit.*
FROM Circuit RIGHT JOIN (LienCircuitEngin RIGHT JOIN
Engin ON

LienCircuitEngin.NumEngin=Engin.NumOrdre) ON
Circuit.NumOrdre=LienCircuitEngin.NumCircuit
WHERE Circuit.IsInUse = false and
Engin.NumOrdre in (SELECT Engin.NumOrdre

FROM Engin LEFT JOIN

( LienCircuitEngin LEFT JOIN Circuit ON
LienCircuitEngin.NumEngin =

Circuit.NumOrdre ) ON Engin.NumOrdre =
LienCircuitEngin.NumEngin

WHERE
engin.IsInUselse and Circuit.NumOrdre =
Circuit.NumOrdre);


Il me manque de pouvoir synchroniser la sous requête à la
requête principale

..... et là je sèche....
Merci par avance pour vos conseils.



-
Cordiales salutations.

Serge METZGER




.




.




Serge Metzger
Le #4632141
SUPER MERCI ...

--
Cordiales salutations.

Serge METZGER



"phil" news:0afa01c3d5f4$98fd00c0$
Essaye avec cette requête. J'ai testé, ça devrait
fonctionner si j'ai bien compris ce que tu m'as dit...

SELECT DISTINCT c.numcircuit
FROM Circuit AS c, Lien_Circuit_engin AS l
WHERE c.Numcircuit=l.numcircuit
and estutiliséúlse
and (select count(l.numengin)
from lien_circuit_engin l) (select count(l.numengin)
from lien_circuit_engin l , engin e
where l.numengin=e.numengin
and e.estutiliséúlse);


-----Message d'origine-----


déjà cette info me permet de simplifier la
requête ...quoi que ...

mais ce n'est pas encore ça ... pour chaque circuit j'ai
en moyenne 15 engin

(de 10 à 20 par exemple) et je veux connaître les
circuits qui ont tous leur

engin de disponible sachant qu'un autre circuit en cours
d'utilisation

utilise certains engin utilisé dans d'autre circuit.
(Plusieurs circuits ont

des engins en commun et et un engin en cours
d'utilisation ne peut-être

utilisé que par un circuit à la fois)

en fait, si j'ai à l'instant T le circuit 1 qui utilise
les engin 1,3,7,9

d'actif ... tous les circuits qui utilisent l'un des
engin 1,3,7,9 ne

peuvent être sélectionnés ...


merci pour d'autre idées ..
Cordiales salutations.
Serge METZGER



"phil" le message de

news:0af501c3d5ee$a72246c0$
Normalement, dans ta table LIEN_CIRCUIT_ENGIN, tu ne dois
avoir que les couples engin-circuit. C'est-à-dire que si
on a le couple engin numéro 1 circuit numéro 5, on est sûr
que le circuit numéro 5 a l'engin 1, et que l'engin 1 est
sur le numéro 5.
Si c'est bien come ça, je pense que cette requête pourrait
faire l'affaire :

SELECT NumCircuit
FROM CIRCUIT
WHERE NumCircuit NOT IN
(SELECT NumCircuit
FROM LIEN_CIRCUIT_ENGIN);

Ainsi, la requête imbriquée (entre parenthèses) cherche
les circuits qui ont au moins un engin. La requête
principale aura la liste des circuits et enlèvera ceux qui
ont au moins un engin. Il restera ceux qui n'en ont pas...
Et voilà!


-----Message d'origine-----
Bonjour a tous ,

J'ai du mal avec une requête SQL sous MS Access.
J'explique :

3 tables jointes :

Table : CIRCUIT
- NumCircuit (integer)
- Libelle (String)
- EstUtilisé (bool)

Table : LIEN_CIRCUIT_ENGIN
- NumCircuit (integer)
- NumEngin (integer)

Table : ENGIN
- NumEngin (Integer)
- Libelle (string)
- EstUtilisé (bool)

La relation est construite de sorte à avoir "N" ENGIN
pour un CIRCUIT et

pour chaque ENGIN les "N" CIRCUIT qui l'utilise.
(plusieurs cicuit utilisent les mêmes engin : le nombre
d'engin utilisé par

un circuit n'eset pas déterminé a priori)

La requête que je cherche doit permettre de trouver la
liste des CIRCUIT qui

ne sont pas utilisé et dont AUCUN ENGIN associé n'est
utilisé.


La requête actuelle (qui ne fonctionnement pas encore)
est la suivante :

SELECT Circuit.*
FROM Circuit RIGHT JOIN (LienCircuitEngin RIGHT JOIN
Engin ON

LienCircuitEngin.NumEngin=Engin.NumOrdre) ON
Circuit.NumOrdre=LienCircuitEngin.NumCircuit
WHERE Circuit.IsInUse = false and
Engin.NumOrdre in (SELECT Engin.NumOrdre

FROM Engin LEFT JOIN

( LienCircuitEngin LEFT JOIN Circuit ON
LienCircuitEngin.NumEngin >>Circuit.NumOrdre ) ON Engin.NumOrdre >LienCircuitEngin.NumEngin

WHERE
engin.IsInUseúlse and Circuit.NumOrdre >Circuit.NumOrdre);

Il me manque de pouvoir synchroniser la sous requête à la
requête principale

..... et là je sèche....
Merci par avance pour vos conseils.



-
Cordiales salutations.

Serge METZGER




.




.




Poster une réponse
Anonyme