Voil=E0 je dois executer une requete SQL sur une BDD HyperFile c/s
Je bataille d=E9j=E0 avec 2 tables mais il faudra passer =E0 3 apr=E8s. Alo=
rs
je m'explique
J'ai une table "Materiel" et une table "Mouvement"
Je veux recuperer TOUT mon mat=E9riel et si il y a un mouvement dont la
date de sortie est vide r=E9cuperer l'"IdMouvement" (ensuite il faudra
recuperer la personne)
J'ai fait le code ci-dessous. Mais je recupere bien tout mon materiel
avec une date de sortie vide, je r=E9cup=E8re bien mon materiel sans
mouvement, Mais je ne r=E9cup=E8re pas mon materiel qui a un ou des
mouvements mais dont aucun n'a la date de sortie vide
Pourriez-vous me guider s'il vous plait.
SELECT Materiel.IDMateriel, Materiel.Modele_Materiel,
Materiel.Processeur_Ordi, Materiel.RAM_Ordi,
Materiel.HD_Ordi, Materiel.Ref_Interne_Materiel,
Materiel.Date_Achat_Materiel, Materiel.Date_Garantie_Materiel,
Materiel.Date_Sortie_Materiel, Materiel.Stand_By,
Materiel.Prevoir_Remplacement, Materiel.Prix_Achat_Materiel,
Materiel.IDType_Materiel,
Mouvement.IDMouvement
FROM Materiel LEFT OUTER JOIN Mouvement ON
(Materiel.IDMateriel=3DMouvement.IDMateriel AND Mouvement.Date_Fin =3D '')
en r=E9sum=E9
En fait je veux r=E9cuperer toute la liste de mon materiel
1 - si il y a un mouvement dont la date de sortie est vide je veux
recuperer ce mouvement avec le materiel
2 - mais si il n'y a aucun mouvement je veux n=E9anmoins recuperer mon
materiel.
3 - ou si il y a des mouvements mais tous avec une date de sortie je
veux n=E9anmoins recuperer mon materiel.
J'ai bien les points 1 et 2 mais je n'arrive pas =E0 avoir le 3 et
pourtnat le code sql doit =EAtre bon
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Emmanuel LECOESTER
SELECT Materiel.IDMateriel FROM Materiel -- cas 1 where exists (select 1 from Mouvement where Materiel.IDMateriel=Mouvement.IDMateriel AND Mouvement.Date_Fin is null) -- cas 2 or not exists (select 1 from Mouvement where Materiel.IDMateriel=Mouvement.IDMateriel) - cas 3 : si tous les mouvements ont une date <=> pas (un mouvement n'a pas de date) or not exists (select 1 from Mouvement where Materiel.IDMateriel=Mouvement.IDMateriel AND Mouvement.Date_Fin is null)
reste ensuite à faire les jointures nécessaires.
EN espérant avoir fait avancer le shmilblick
SELECT Materiel.IDMateriel
FROM Materiel
-- cas 1
where exists (select 1
from Mouvement
where Materiel.IDMateriel=Mouvement.IDMateriel
AND Mouvement.Date_Fin is null)
-- cas 2
or not exists (select 1
from Mouvement
where Materiel.IDMateriel=Mouvement.IDMateriel)
- cas 3 : si tous les mouvements ont une date <=> pas (un mouvement n'a pas
de date)
or not exists (select 1 from Mouvement
where Materiel.IDMateriel=Mouvement.IDMateriel
AND Mouvement.Date_Fin is null)
SELECT Materiel.IDMateriel FROM Materiel -- cas 1 where exists (select 1 from Mouvement where Materiel.IDMateriel=Mouvement.IDMateriel AND Mouvement.Date_Fin is null) -- cas 2 or not exists (select 1 from Mouvement where Materiel.IDMateriel=Mouvement.IDMateriel) - cas 3 : si tous les mouvements ont une date <=> pas (un mouvement n'a pas de date) or not exists (select 1 from Mouvement where Materiel.IDMateriel=Mouvement.IDMateriel AND Mouvement.Date_Fin is null)
reste ensuite à faire les jointures nécessaires.
EN espérant avoir fait avancer le shmilblick
JeAn-PhI
PascalXLD a présenté l'énoncé suivant :
Bonjour
Voilà je dois executer une requete SQL sur une BDD HyperFile c/s
Je bataille déjà avec 2 tables mais il faudra passer à 3 après. Alors je m'explique
J'ai une table "Materiel" et une table "Mouvement"
Je veux recuperer TOUT mon matériel et si il y a un mouvement dont la date de sortie est vide récuperer l'"IdMouvement" (ensuite il faudra recuperer la personne)
J'ai fait le code ci-dessous. Mais je recupere bien tout mon materiel avec une date de sortie vide, je récupère bien mon materiel sans mouvement, Mais je ne récupère pas mon materiel qui a un ou des mouvements mais dont aucun n'a la date de sortie vide
Pourriez-vous me guider s'il vous plait.
SELECT Materiel.IDMateriel, Materiel.Modele_Materiel, Materiel.Processeur_Ordi, Materiel.RAM_Ordi, Materiel.HD_Ordi, Materiel.Ref_Interne_Materiel, Materiel.Date_Achat_Materiel, Materiel.Date_Garantie_Materiel, Materiel.Date_Sortie_Materiel, Materiel.Stand_By, Materiel.Prevoir_Remplacement, Materiel.Prix_Achat_Materiel, Materiel.IDType_Materiel, Mouvement.IDMouvement FROM Materiel LEFT OUTER JOIN Mouvement ON (Materiel.IDMateriel=Mouvement.IDMateriel AND Mouvement.Date_Fin = '')
en résumé En fait je veux récuperer toute la liste de mon materiel
1 - si il y a un mouvement dont la date de sortie est vide je veux recuperer ce mouvement avec le materiel
2 - mais si il n'y a aucun mouvement je veux néanmoins recuperer mon materiel.
3 - ou si il y a des mouvements mais tous avec une date de sortie je veux néanmoins recuperer mon materiel.
J'ai bien les points 1 et 2 mais je n'arrive pas à avoir le 3 et pourtnat le code sql doit être bon
Merci d'avance
Pascal
vous pouvez faire qq chose comme ca :
SELECT Materiel.IDMateriel, Materiel.Modele_Materiel, Materiel.Processeur_Ordi, Materiel.RAM_Ordi, Materiel.HD_Ordi, Materiel.Ref_Interne_Materiel, Materiel.Date_Achat_Materiel, Materiel.Date_Garantie_Materiel, Materiel.Date_Sortie_Materiel, Materiel.Stand_By, Materiel.Prevoir_Remplacement, Materiel.Prix_Achat_Materiel, Materiel.IDType_Materiel, Mouvement.IDMouvement FROM Materiel LEFT OUTER JOIN Mouvement ON (Materiel.IDMateriel=Mouvement.IDMateriel) WHERE Mouvement.Date_Fin <> '' OR Mouvement.Date_Fin = ''
-- Cordialement JeAn-PhI
PascalXLD a présenté l'énoncé suivant :
Bonjour
Voilà je dois executer une requete SQL sur une BDD HyperFile c/s
Je bataille déjà avec 2 tables mais il faudra passer à 3 après. Alors
je m'explique
J'ai une table "Materiel" et une table "Mouvement"
Je veux recuperer TOUT mon matériel et si il y a un mouvement dont la
date de sortie est vide récuperer l'"IdMouvement" (ensuite il faudra
recuperer la personne)
J'ai fait le code ci-dessous. Mais je recupere bien tout mon materiel
avec une date de sortie vide, je récupère bien mon materiel sans
mouvement, Mais je ne récupère pas mon materiel qui a un ou des
mouvements mais dont aucun n'a la date de sortie vide
Pourriez-vous me guider s'il vous plait.
SELECT Materiel.IDMateriel, Materiel.Modele_Materiel,
Materiel.Processeur_Ordi, Materiel.RAM_Ordi,
Materiel.HD_Ordi, Materiel.Ref_Interne_Materiel,
Materiel.Date_Achat_Materiel, Materiel.Date_Garantie_Materiel,
Materiel.Date_Sortie_Materiel, Materiel.Stand_By,
Materiel.Prevoir_Remplacement, Materiel.Prix_Achat_Materiel,
Materiel.IDType_Materiel,
Mouvement.IDMouvement
FROM Materiel LEFT OUTER JOIN Mouvement ON
(Materiel.IDMateriel=Mouvement.IDMateriel AND Mouvement.Date_Fin = '')
en résumé
En fait je veux récuperer toute la liste de mon materiel
1 - si il y a un mouvement dont la date de sortie est vide je veux
recuperer ce mouvement avec le materiel
2 - mais si il n'y a aucun mouvement je veux néanmoins recuperer mon
materiel.
3 - ou si il y a des mouvements mais tous avec une date de sortie je
veux néanmoins recuperer mon materiel.
J'ai bien les points 1 et 2 mais je n'arrive pas à avoir le 3 et
pourtnat le code sql doit être bon
Merci d'avance
Pascal
vous pouvez faire qq chose comme ca :
SELECT Materiel.IDMateriel, Materiel.Modele_Materiel,
Materiel.Processeur_Ordi, Materiel.RAM_Ordi,
Materiel.HD_Ordi, Materiel.Ref_Interne_Materiel,
Materiel.Date_Achat_Materiel, Materiel.Date_Garantie_Materiel,
Materiel.Date_Sortie_Materiel, Materiel.Stand_By,
Materiel.Prevoir_Remplacement, Materiel.Prix_Achat_Materiel,
Materiel.IDType_Materiel,
Mouvement.IDMouvement
FROM Materiel LEFT OUTER JOIN Mouvement ON
(Materiel.IDMateriel=Mouvement.IDMateriel)
WHERE Mouvement.Date_Fin <> '' OR Mouvement.Date_Fin = ''
Voilà je dois executer une requete SQL sur une BDD HyperFile c/s
Je bataille déjà avec 2 tables mais il faudra passer à 3 après. Alors je m'explique
J'ai une table "Materiel" et une table "Mouvement"
Je veux recuperer TOUT mon matériel et si il y a un mouvement dont la date de sortie est vide récuperer l'"IdMouvement" (ensuite il faudra recuperer la personne)
J'ai fait le code ci-dessous. Mais je recupere bien tout mon materiel avec une date de sortie vide, je récupère bien mon materiel sans mouvement, Mais je ne récupère pas mon materiel qui a un ou des mouvements mais dont aucun n'a la date de sortie vide
Pourriez-vous me guider s'il vous plait.
SELECT Materiel.IDMateriel, Materiel.Modele_Materiel, Materiel.Processeur_Ordi, Materiel.RAM_Ordi, Materiel.HD_Ordi, Materiel.Ref_Interne_Materiel, Materiel.Date_Achat_Materiel, Materiel.Date_Garantie_Materiel, Materiel.Date_Sortie_Materiel, Materiel.Stand_By, Materiel.Prevoir_Remplacement, Materiel.Prix_Achat_Materiel, Materiel.IDType_Materiel, Mouvement.IDMouvement FROM Materiel LEFT OUTER JOIN Mouvement ON (Materiel.IDMateriel=Mouvement.IDMateriel AND Mouvement.Date_Fin = '')
en résumé En fait je veux récuperer toute la liste de mon materiel
1 - si il y a un mouvement dont la date de sortie est vide je veux recuperer ce mouvement avec le materiel
2 - mais si il n'y a aucun mouvement je veux néanmoins recuperer mon materiel.
3 - ou si il y a des mouvements mais tous avec une date de sortie je veux néanmoins recuperer mon materiel.
J'ai bien les points 1 et 2 mais je n'arrive pas à avoir le 3 et pourtnat le code sql doit être bon
Merci d'avance
Pascal
vous pouvez faire qq chose comme ca :
SELECT Materiel.IDMateriel, Materiel.Modele_Materiel, Materiel.Processeur_Ordi, Materiel.RAM_Ordi, Materiel.HD_Ordi, Materiel.Ref_Interne_Materiel, Materiel.Date_Achat_Materiel, Materiel.Date_Garantie_Materiel, Materiel.Date_Sortie_Materiel, Materiel.Stand_By, Materiel.Prevoir_Remplacement, Materiel.Prix_Achat_Materiel, Materiel.IDType_Materiel, Mouvement.IDMouvement FROM Materiel LEFT OUTER JOIN Mouvement ON (Materiel.IDMateriel=Mouvement.IDMateriel) WHERE Mouvement.Date_Fin <> '' OR Mouvement.Date_Fin = ''
-- Cordialement JeAn-PhI
PascalXLD
Alors retour après essai
Pour Emmanuel je n'arrive pas à réécrire ton code. Peux-tu me filer un coup de main STP?
Pour Jean-Phi Je ne crois pas que cela réponde à mon besoin
Ce que je ne comprends pas c'est que pourtant c'est bien le principe du LEFT OUTER JOIN de récuperer les données de la table de gauche si la condition de la jointure n'est pas remplie.
Si quelqu'un a une idée
Merci d'avance
Alors retour après essai
Pour Emmanuel je n'arrive pas à réécrire ton code. Peux-tu me filer un
coup de main STP?
Pour Jean-Phi Je ne crois pas que cela réponde à mon besoin
Ce que je ne comprends pas c'est que pourtant c'est bien le principe
du LEFT OUTER JOIN de récuperer les données de la table de gauche si
la condition de la jointure n'est pas remplie.
Pour Emmanuel je n'arrive pas à réécrire ton code. Peux-tu me filer un coup de main STP?
Pour Jean-Phi Je ne crois pas que cela réponde à mon besoin
Ce que je ne comprends pas c'est que pourtant c'est bien le principe du LEFT OUTER JOIN de récuperer les données de la table de gauche si la condition de la jointure n'est pas remplie.
Si quelqu'un a une idée
Merci d'avance
mat
PascalXLD wrote:
Alors retour après essai
Pour Emmanuel je n'arrive pas à réécrire ton code. Peux-tu me filer un coup de main STP?
Bonjour,
Windev n'aime pas les liaisons multiples sans alias. En plus, je n'ai jamais réussi à faire fonctionner EXIST/NOT EXIST. Le suivant serait ma version HF du code d'Emmanuel :
where IDMateriel IN (select IDMateriel AS IDM1 FROM Mouvement WHERE Materiel.IDMateriel=Mouvement.IDMateriel AND Mouvement.Date_Fin is null)
-- cas 2 or IDMateriel NOT IN (select IDMateriel AS IDM2 FROM Mouvement WHERE Materiel.IDMateriel=Mouvement.IDMateriel)
- cas 3 : si tous les mouvements ont une date <=> pas (un mouvement n'a pas de date) or IDMateriel NOT IN (select IDMateriel AS IDM3 from Mouvement where Materiel.IDMateriel=Mouvement.IDMateriel AND Mouvement.Date_Fin is null)
Saltuations Mat
PascalXLD wrote:
Alors retour après essai
Pour Emmanuel je n'arrive pas à réécrire ton code. Peux-tu me filer un
coup de main STP?
Bonjour,
Windev n'aime pas les liaisons multiples sans alias. En plus, je n'ai
jamais réussi à faire fonctionner EXIST/NOT EXIST. Le suivant serait ma
version HF du code d'Emmanuel :
where IDMateriel IN (select IDMateriel AS IDM1 FROM Mouvement
WHERE Materiel.IDMateriel=Mouvement.IDMateriel
AND Mouvement.Date_Fin is null)
-- cas 2
or IDMateriel NOT IN (select IDMateriel AS IDM2 FROM Mouvement
WHERE Materiel.IDMateriel=Mouvement.IDMateriel)
- cas 3 : si tous les mouvements ont une date <=> pas (un mouvement n'a
pas de date)
or IDMateriel NOT IN (select IDMateriel AS IDM3 from Mouvement
where Materiel.IDMateriel=Mouvement.IDMateriel
AND Mouvement.Date_Fin is null)
Pour Emmanuel je n'arrive pas à réécrire ton code. Peux-tu me filer un coup de main STP?
Bonjour,
Windev n'aime pas les liaisons multiples sans alias. En plus, je n'ai jamais réussi à faire fonctionner EXIST/NOT EXIST. Le suivant serait ma version HF du code d'Emmanuel :
where IDMateriel IN (select IDMateriel AS IDM1 FROM Mouvement WHERE Materiel.IDMateriel=Mouvement.IDMateriel AND Mouvement.Date_Fin is null)
-- cas 2 or IDMateriel NOT IN (select IDMateriel AS IDM2 FROM Mouvement WHERE Materiel.IDMateriel=Mouvement.IDMateriel)
- cas 3 : si tous les mouvements ont une date <=> pas (un mouvement n'a pas de date) or IDMateriel NOT IN (select IDMateriel AS IDM3 from Mouvement where Materiel.IDMateriel=Mouvement.IDMateriel AND Mouvement.Date_Fin is null)
Saltuations Mat
mat
...
Windev n'aime pas les liaisons multiples AU MEME FICHIER sans alias.
...
...
Windev n'aime pas les liaisons multiples AU MEME FICHIER sans alias.
Windev n'aime pas les liaisons multiples AU MEME FICHIER sans alias.
...
mat
mat wrote:
comme je disais le problème peut exister lors de liaisons multiples au même fichier, donc l'alias devrait être sur le fichier pas sur la rubrique:
where IDMateriel IN (select IDMateriel FROM Mouvement AS M1 WHERE Materiel.IDMateriel=M1.IDMateriel AND M1.Date_Fin is null)
-- cas 2 or IDMateriel NOT IN (select IDMateriel FROM Mouvement AS M2 WHERE Materiel.IDMateriel=M2.IDMateriel)
- cas 3 : si tous les mouvements ont une date <=> pas (un mouvement n'a pas de date) or IDMateriel NOT IN (select IDMateriel from Mouvement AS M3 where Materiel.IDMateriel=M3.IDMateriel AND M3.Date_Fin is null)
Saltuations Mat
mat wrote:
comme je disais le problème peut exister lors de liaisons multiples au
même fichier, donc l'alias devrait être sur le fichier pas sur la rubrique:
where IDMateriel IN (select IDMateriel FROM Mouvement AS M1
WHERE Materiel.IDMateriel=M1.IDMateriel
AND M1.Date_Fin is null)
-- cas 2
or IDMateriel NOT IN (select IDMateriel FROM Mouvement AS M2
WHERE Materiel.IDMateriel=M2.IDMateriel)
- cas 3 : si tous les mouvements ont une date <=> pas (un mouvement n'a
pas de date)
or IDMateriel NOT IN (select IDMateriel from Mouvement AS M3
where Materiel.IDMateriel=M3.IDMateriel
AND M3.Date_Fin is null)
comme je disais le problème peut exister lors de liaisons multiples au même fichier, donc l'alias devrait être sur le fichier pas sur la rubrique:
where IDMateriel IN (select IDMateriel FROM Mouvement AS M1 WHERE Materiel.IDMateriel=M1.IDMateriel AND M1.Date_Fin is null)
-- cas 2 or IDMateriel NOT IN (select IDMateriel FROM Mouvement AS M2 WHERE Materiel.IDMateriel=M2.IDMateriel)
- cas 3 : si tous les mouvements ont une date <=> pas (un mouvement n'a pas de date) or IDMateriel NOT IN (select IDMateriel from Mouvement AS M3 where Materiel.IDMateriel=M3.IDMateriel AND M3.Date_Fin is null)
Saltuations Mat
PascalXLD
Ok merci Mat
je regarderai cela demain et je vous tiens au courant
Ok merci Mat
je regarderai cela demain et je vous tiens au courant