Bonjour,
je travaille avec C++Builder6 et Access 2000
Je recherche avoir plusieurs type d'ebalissement ex 'CP' ou 'AS' etc..
quand je fais :
Code:
SELECT DISTINCT T.LibelleType AS NatureEtablissement, C.Commune,
E.NomEt, E.Adresse, E.CompAdresse, E.Tel, E.Mail, E.Fax, E.SiteWeb
FROM Etablissement AS E, Commune AS C, Type AS T
WHERE E.CodeType=T.CodeType AND E.CodeCommune=C.CodeCommune and
t.type='as'
ORDER BY E.NomEt;
c'est OK
mais dans la condition WHERE qand je fais par exemple:
Code:
E.CodeCommune=C.CodeCommune and t.type='as' AND t.type='Cp'
La plus d'enregistrement alors qu'ils sont bien present.
Je voudrais que ma requete puisse lire au miniminum 1 seul type ou
2 ,3 ou n type est il possible de faire en un seule requete ?
faut il faire un GroupBy ? HAVING BY si oui comment ?
merci de vos response....
si je n'est pas ete assez clair contactez moi
_________________
Cordialement,
Sarda Olivier
_________________________________
Site Web :
http://www.membres.lycos.fr/osarda/
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
Ph. B.
Olivier Sarda wrote:
Bonjour, je travaille avec C++Builder6 et Access 2000
Je recherche avoir plusieurs type d'ebalissement ex 'CP' ou 'AS' etc..
quand je fais :
Code: SELECT DISTINCT T.LibelleType AS NatureEtablissement, C.Commune, E.NomEt, E.Adresse, E.CompAdresse, E.Tel, E.Mail, E.Fax, E.SiteWeb FROM Etablissement AS E, Commune AS C, Type AS T WHERE E.CodeType=T.CodeType AND E.CodeCommune=C.CodeCommune and t.type='as' ORDER BY E.NomEt;
c'est OK
mais dans la condition WHERE qand je fais par exemple:
Code: E.CodeCommune=C.CodeCommune and t.type='as' AND t.type='Cp'
La plus d'enregistrement alors qu'ils sont bien present.
Ce qui est tout à fait normal tu demandes qu'une colonne ait *à la fois* les valeurs 'as' et 'Cp' !
Il te faut donc changer cette partie de la clause "where" et écrire:
E.CodeCommune = C.CodeCommune AND ( T.CodeType = 'as' OR T.CodeType = 'Cp' )
Tu peux aussi écrire (et dans ce cas, tu peux étendre ta sélection à n types):
E.CodeCommune = C.CodeCommune AND T.CodeType IN ( 'as', 'Cp' )
Allons plus loin ! Ta clause where comprend des conditions de jointures et des conditions de filtres car tu utilise une requête avec un produit cartésien alors qu'une jointure interne serait plus logique et efficace (bien qu'avec Access...). Pour une meilleure lisibilité et efficacité, sépares les deux et écris:
SELECT T.LibelleType AS NatureEtablissement, C.Commune, E.NomEt, E.Adresse, E.CompAdresse, E.Tel, E.Mail, E.Fax, E.SiteWeb FROM Etablissement E INNER JOIN Commune C ON E.CodeType = T.CodeType INNER JOIN Type T ON E.CodeCommune=C.CodeCommune WHERE T.CodeType IN ( 'as', 'Cp' ) ORDER BY E.NomEt
Attention avec Access, tu seras peut être obligé de parenthéser tes jointures comme suit (bien que ce ne soit pas la norme !)
SELECT T.LibelleType AS NatureEtablissement, C.Commune, E.NomEt, E.Adresse, E.CompAdresse, E.Tel, E.Mail, E.Fax, E.SiteWeb FROM ( Etablissement E INNER JOIN Commune C ON E.CodeType = T.CodeType ) INNER JOIN Type T ON E.CodeCommune=C.CodeCommune WHERE T.CodeType IN ( 'as', 'Cp' ) ORDER BY E.NomEt
Je voudrais que ma requete puisse lire au miniminum 1 seul type ou 2 ,3 ou n type est il possible de faire en un seule requete ?
Cf. ci-dessus voir le mot clé "IN"
faut il faire un GroupBy ? HAVING BY si oui comment ?
Non, il s'agit ici d'une condition de filtre, à placer dans la clause "WHERE" !
Le "HAVING" sert dans des requêtes avec des aggrégations (clause "GROUP BY") SELECT ... FROM ... GROUP BY ... HAVING ...
Ce qui n'est pas le cas ici. D'autre part, c'est plus couteux en performance de filtrer dans un having que dans le where et ca ne repond pas à la même problématique...
merci de vos response....
De rien... Pour les jointures, c'est expliqué ici : http://sqlpro.developpez.com/SQL_AZ_3.html
et les clauses GROUP BY et HAVING : http://sqlpro.developpez.com/SQL_AZ_4.html
si je n'est pas ete assez clair contactez moi
_________________ Cordialement, Sarda Olivier _________________________________ Site Web : http://www.membres.lycos.fr/osarda/
-- Philippe.
Olivier Sarda wrote:
Bonjour,
je travaille avec C++Builder6 et Access 2000
Je recherche avoir plusieurs type d'ebalissement ex 'CP' ou 'AS' etc..
quand je fais :
Code:
SELECT DISTINCT T.LibelleType AS NatureEtablissement, C.Commune,
E.NomEt, E.Adresse, E.CompAdresse, E.Tel, E.Mail, E.Fax, E.SiteWeb
FROM Etablissement AS E, Commune AS C, Type AS T
WHERE E.CodeType=T.CodeType AND E.CodeCommune=C.CodeCommune and
t.type='as'
ORDER BY E.NomEt;
c'est OK
mais dans la condition WHERE qand je fais par exemple:
Code:
E.CodeCommune=C.CodeCommune and t.type='as' AND t.type='Cp'
La plus d'enregistrement alors qu'ils sont bien present.
Ce qui est tout à fait normal tu demandes qu'une colonne ait *à la fois* les
valeurs 'as' et 'Cp' !
Il te faut donc changer cette partie de la clause "where" et écrire:
E.CodeCommune = C.CodeCommune AND
( T.CodeType = 'as' OR T.CodeType = 'Cp' )
Tu peux aussi écrire (et dans ce cas, tu peux étendre ta sélection à n types):
E.CodeCommune = C.CodeCommune AND T.CodeType IN ( 'as', 'Cp' )
Allons plus loin ! Ta clause where comprend des conditions de jointures et des
conditions de filtres car tu utilise une requête avec un produit cartésien alors
qu'une jointure interne serait plus logique et efficace (bien qu'avec Access...).
Pour une meilleure lisibilité et efficacité, sépares les deux et écris:
SELECT T.LibelleType AS NatureEtablissement, C.Commune,
E.NomEt, E.Adresse, E.CompAdresse, E.Tel, E.Mail, E.Fax, E.SiteWeb
FROM Etablissement E
INNER JOIN Commune C ON E.CodeType = T.CodeType
INNER JOIN Type T ON E.CodeCommune=C.CodeCommune
WHERE T.CodeType IN ( 'as', 'Cp' )
ORDER BY E.NomEt
Attention avec Access, tu seras peut être obligé de parenthéser tes jointures
comme suit (bien que ce ne soit pas la norme !)
SELECT T.LibelleType AS NatureEtablissement, C.Commune,
E.NomEt, E.Adresse, E.CompAdresse, E.Tel, E.Mail, E.Fax, E.SiteWeb
FROM ( Etablissement E
INNER JOIN Commune C ON E.CodeType = T.CodeType )
INNER JOIN Type T ON E.CodeCommune=C.CodeCommune
WHERE T.CodeType IN ( 'as', 'Cp' )
ORDER BY E.NomEt
Je voudrais que ma requete puisse lire au miniminum 1 seul type ou
2 ,3 ou n type est il possible de faire en un seule requete ?
Cf. ci-dessus voir le mot clé "IN"
faut il faire un GroupBy ? HAVING BY si oui comment ?
Non, il s'agit ici d'une condition de filtre, à placer dans la clause "WHERE" !
Le "HAVING" sert dans des requêtes avec des aggrégations (clause "GROUP BY")
SELECT ...
FROM ...
GROUP BY ...
HAVING ...
Ce qui n'est pas le cas ici. D'autre part, c'est plus couteux en performance de
filtrer dans un having que dans le where et ca ne repond pas à la même
problématique...
merci de vos response....
De rien...
Pour les jointures, c'est expliqué ici :
http://sqlpro.developpez.com/SQL_AZ_3.html
et les clauses GROUP BY et HAVING :
http://sqlpro.developpez.com/SQL_AZ_4.html
si je n'est pas ete assez clair contactez moi
_________________
Cordialement,
Sarda Olivier
_________________________________
Site Web :
http://www.membres.lycos.fr/osarda/
Bonjour, je travaille avec C++Builder6 et Access 2000
Je recherche avoir plusieurs type d'ebalissement ex 'CP' ou 'AS' etc..
quand je fais :
Code: SELECT DISTINCT T.LibelleType AS NatureEtablissement, C.Commune, E.NomEt, E.Adresse, E.CompAdresse, E.Tel, E.Mail, E.Fax, E.SiteWeb FROM Etablissement AS E, Commune AS C, Type AS T WHERE E.CodeType=T.CodeType AND E.CodeCommune=C.CodeCommune and t.type='as' ORDER BY E.NomEt;
c'est OK
mais dans la condition WHERE qand je fais par exemple:
Code: E.CodeCommune=C.CodeCommune and t.type='as' AND t.type='Cp'
La plus d'enregistrement alors qu'ils sont bien present.
Ce qui est tout à fait normal tu demandes qu'une colonne ait *à la fois* les valeurs 'as' et 'Cp' !
Il te faut donc changer cette partie de la clause "where" et écrire:
E.CodeCommune = C.CodeCommune AND ( T.CodeType = 'as' OR T.CodeType = 'Cp' )
Tu peux aussi écrire (et dans ce cas, tu peux étendre ta sélection à n types):
E.CodeCommune = C.CodeCommune AND T.CodeType IN ( 'as', 'Cp' )
Allons plus loin ! Ta clause where comprend des conditions de jointures et des conditions de filtres car tu utilise une requête avec un produit cartésien alors qu'une jointure interne serait plus logique et efficace (bien qu'avec Access...). Pour une meilleure lisibilité et efficacité, sépares les deux et écris:
SELECT T.LibelleType AS NatureEtablissement, C.Commune, E.NomEt, E.Adresse, E.CompAdresse, E.Tel, E.Mail, E.Fax, E.SiteWeb FROM Etablissement E INNER JOIN Commune C ON E.CodeType = T.CodeType INNER JOIN Type T ON E.CodeCommune=C.CodeCommune WHERE T.CodeType IN ( 'as', 'Cp' ) ORDER BY E.NomEt
Attention avec Access, tu seras peut être obligé de parenthéser tes jointures comme suit (bien que ce ne soit pas la norme !)
SELECT T.LibelleType AS NatureEtablissement, C.Commune, E.NomEt, E.Adresse, E.CompAdresse, E.Tel, E.Mail, E.Fax, E.SiteWeb FROM ( Etablissement E INNER JOIN Commune C ON E.CodeType = T.CodeType ) INNER JOIN Type T ON E.CodeCommune=C.CodeCommune WHERE T.CodeType IN ( 'as', 'Cp' ) ORDER BY E.NomEt
Je voudrais que ma requete puisse lire au miniminum 1 seul type ou 2 ,3 ou n type est il possible de faire en un seule requete ?
Cf. ci-dessus voir le mot clé "IN"
faut il faire un GroupBy ? HAVING BY si oui comment ?
Non, il s'agit ici d'une condition de filtre, à placer dans la clause "WHERE" !
Le "HAVING" sert dans des requêtes avec des aggrégations (clause "GROUP BY") SELECT ... FROM ... GROUP BY ... HAVING ...
Ce qui n'est pas le cas ici. D'autre part, c'est plus couteux en performance de filtrer dans un having que dans le where et ca ne repond pas à la même problématique...
merci de vos response....
De rien... Pour les jointures, c'est expliqué ici : http://sqlpro.developpez.com/SQL_AZ_3.html
et les clauses GROUP BY et HAVING : http://sqlpro.developpez.com/SQL_AZ_4.html
si je n'est pas ete assez clair contactez moi
_________________ Cordialement, Sarda Olivier _________________________________ Site Web : http://www.membres.lycos.fr/osarda/