Je poss=E8des 4 tables :=20
- FilterCrit : Qui contient des id de crit=E8re=20
- Crit=E8re : Liste des crit=E8res=20
- Mod_Crit : Jointure entre crit=E8res et mod=E8le=20
- Model : Liste des mod=E8les=20
Je voudrai afficher la liste des mod=E8les selon 0 ou N=20
crit=E8res qui sont stock=E9 dans la tables FilterCrit.=20
Le probl=E8me est que la requ=E8te ci dessous me renvoi les=20
mod=E8les avec une condition OU sur les crit=E8res et pas ET.=20
exemple :=20
Je voudrai les mod=E8les dont le crit=E8re est xx ET yy=20
Requ=E8te:=20
SELECT dbo.Critere.nom, dbo.Model.nom AS Expr1=20
FROM dbo.Critere INNER JOIN=20
dbo.Mod_Crit ON dbo.Critere.id =3D dbo.Mod_Crit.idCrit=20
INNER JOIN=20
dbo.Model ON dbo.Mod_Crit.idMod =3D dbo.Model.id INNER JOIN=20
dbo.FilterCrit ON dbo.Critere.id =3D dbo.FilterCrit.id=20
WHERE (dbo.FilterCrit.uId =3D 0)=20
Faut il faire une requ=E8te imbriqu=E9e, utiliser EXISTS ?
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
Sylvain Lafontaine
Bonjour,
Pour avoir un ET, vous devez utilisez un Not Exists et non pas un Exists, genre:
... Where (Not Exists (select * from dbo.FilterCrit where dbo.FilterCrit.IdCrit = dbo.Critere.Id and uId <> 0))
J'ai écrit ici IdCrit au lieu de Id à gauche car j'imagine que vous vouliez écrire "dbo.Critere.id = dbo.FilterCrit.idCrit" au lieu de "dbo.Critere.id = dbo.FilterCrit.id" juste avant votre WHERE.
Selon le cas, la fonction Not In pourrait également donner de meilleures performances.
Généralement, ce genre de problème peut devenir très complexe dans une requête et il est souvent préférable d'utiliser une table temporaire, d'y mettre dedans tous les critères possibles et ensuite d'éliminer en conséquence ceux qui ne sont pas bons.
S. L.
"Alex" wrote in message news:14eb101c3fa2c$57733960$ Présentation du problème
Je possèdes 4 tables : - FilterCrit : Qui contient des id de critère - Critère : Liste des critères - Mod_Crit : Jointure entre critères et modèle - Model : Liste des modèles
Je voudrai afficher la liste des modèles selon 0 ou N critères qui sont stocké dans la tables FilterCrit.
Le problème est que la requète ci dessous me renvoi les modèles avec une condition OU sur les critères et pas ET. exemple : Je voudrai les modèles dont le critère est xx ET yy
Requète: SELECT dbo.Critere.nom, dbo.Model.nom AS Expr1 FROM dbo.Critere INNER JOIN dbo.Mod_Crit ON dbo.Critere.id = dbo.Mod_Crit.idCrit INNER JOIN dbo.Model ON dbo.Mod_Crit.idMod = dbo.Model.id INNER JOIN dbo.FilterCrit ON dbo.Critere.id = dbo.FilterCrit.id WHERE (dbo.FilterCrit.uId = 0)
Faut il faire une requète imbriquée, utiliser EXISTS ?
Bonjour,
Pour avoir un ET, vous devez utilisez un Not Exists et non pas un
Exists, genre:
... Where (Not Exists (select * from dbo.FilterCrit where
dbo.FilterCrit.IdCrit = dbo.Critere.Id and uId <> 0))
J'ai écrit ici IdCrit au lieu de Id à gauche car j'imagine que vous
vouliez écrire "dbo.Critere.id = dbo.FilterCrit.idCrit"
au lieu de "dbo.Critere.id = dbo.FilterCrit.id" juste avant votre WHERE.
Selon le cas, la fonction Not In pourrait également donner de meilleures
performances.
Généralement, ce genre de problème peut devenir très complexe dans une
requête et il est souvent préférable d'utiliser une table temporaire, d'y
mettre dedans tous les critères possibles et ensuite d'éliminer en
conséquence ceux qui ne sont pas bons.
S. L.
"Alex" <deledalle@yahoo.fr> wrote in message
news:14eb101c3fa2c$57733960$a001280a@phx.gbl...
Présentation du problème
Je possèdes 4 tables :
- FilterCrit : Qui contient des id de critère
- Critère : Liste des critères
- Mod_Crit : Jointure entre critères et modèle
- Model : Liste des modèles
Je voudrai afficher la liste des modèles selon 0 ou N
critères qui sont stocké dans la tables FilterCrit.
Le problème est que la requète ci dessous me renvoi les
modèles avec une condition OU sur les critères et pas ET.
exemple :
Je voudrai les modèles dont le critère est xx ET yy
Requète:
SELECT dbo.Critere.nom, dbo.Model.nom AS Expr1
FROM dbo.Critere INNER JOIN
dbo.Mod_Crit ON dbo.Critere.id = dbo.Mod_Crit.idCrit
INNER JOIN
dbo.Model ON dbo.Mod_Crit.idMod = dbo.Model.id INNER JOIN
dbo.FilterCrit ON dbo.Critere.id = dbo.FilterCrit.id
WHERE (dbo.FilterCrit.uId = 0)
Faut il faire une requète imbriquée, utiliser EXISTS ?
Pour avoir un ET, vous devez utilisez un Not Exists et non pas un Exists, genre:
... Where (Not Exists (select * from dbo.FilterCrit where dbo.FilterCrit.IdCrit = dbo.Critere.Id and uId <> 0))
J'ai écrit ici IdCrit au lieu de Id à gauche car j'imagine que vous vouliez écrire "dbo.Critere.id = dbo.FilterCrit.idCrit" au lieu de "dbo.Critere.id = dbo.FilterCrit.id" juste avant votre WHERE.
Selon le cas, la fonction Not In pourrait également donner de meilleures performances.
Généralement, ce genre de problème peut devenir très complexe dans une requête et il est souvent préférable d'utiliser une table temporaire, d'y mettre dedans tous les critères possibles et ensuite d'éliminer en conséquence ceux qui ne sont pas bons.
S. L.
"Alex" wrote in message news:14eb101c3fa2c$57733960$ Présentation du problème
Je possèdes 4 tables : - FilterCrit : Qui contient des id de critère - Critère : Liste des critères - Mod_Crit : Jointure entre critères et modèle - Model : Liste des modèles
Je voudrai afficher la liste des modèles selon 0 ou N critères qui sont stocké dans la tables FilterCrit.
Le problème est que la requète ci dessous me renvoi les modèles avec une condition OU sur les critères et pas ET. exemple : Je voudrai les modèles dont le critère est xx ET yy
Requète: SELECT dbo.Critere.nom, dbo.Model.nom AS Expr1 FROM dbo.Critere INNER JOIN dbo.Mod_Crit ON dbo.Critere.id = dbo.Mod_Crit.idCrit INNER JOIN dbo.Model ON dbo.Mod_Crit.idMod = dbo.Model.id INNER JOIN dbo.FilterCrit ON dbo.Critere.id = dbo.FilterCrit.id WHERE (dbo.FilterCrit.uId = 0)
Faut il faire une requète imbriquée, utiliser EXISTS ?