Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
568 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] aide sur un SELECT

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] aide sur un SELECT

n°212123
Le Breton
Posté le 11-09-2002 à 13:27:00  profilanswer
 

J'ai une table table qui contient des données pour différentes personnes repérées par le champ emplid. Ces emplid peuvent avoir plusieurs enregistrements chacun.
Je cherche à isoler tous les emplid qui ont uniquement 2 lignes dans cette table.
Quelle est la condition qui me permet de spécifier le fait que chaque emplid de table n'a que 2 enregistrements ?
Merci pour votre aide

mood
Publicité
Posté le 11-09-2002 à 13:27:00  profilanswer
 

n°212124
bozocarzu
Posté le 11-09-2002 à 13:29:48  profilanswer
 

je ne pense pas qu'une fonction existe pour faire sa, il faut voir avecde structure conditionnel, ect, mais a mon avis ça seras trop long a executer !

n°212132
--greg--
Posté le 11-09-2002 à 13:36:48  profilanswer
 

select emplid, count(*) as c from table where c=2 group by emplid


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°212134
bozocarzu
Posté le 11-09-2002 à 13:37:50  profilanswer
 

--greg-- a écrit a écrit :

select emplid, count(*) as c from table where c=2 group by emplid




 
 :ouch:  
 
J'en suis pas encore a se niveau !

n°212135
MagicBuzz
Posté le 11-09-2002 à 13:38:22  profilanswer
 

faudra rebidouiller un peu la requête, mais en gros :
 

Code :
  1. SELECT EMP.*
  2. FORM EMP, (SELECT EMPLID, COUNT(EMPLID) NB FROM EMP GROUP BY EMPLID) as TEMP
  3. WHERE EMP.EMPLID = TEMP.EMPLID
  4. AND TEMP.NB = 2


Message édité par MagicBuzz le 11-09-2002 à 13:40:12
n°212136
Le Breton
Posté le 11-09-2002 à 13:38:52  profilanswer
 

Peut être que la fonction rownum pourrait m'aider mais je connais pas vraiment son utilité (je l'ai vu en me baladant sur le forum à la recherche de l'idée géniale)
Qqn aurait un rapide briefing à me faire dessus ?

n°212137
--greg--
Posté le 11-09-2002 à 13:39:06  profilanswer
 

MagicBuzz a écrit a écrit :

faudra rebidouiller un peu la requête, mais en gros :
 

Code :
  1. SELECT EMP.*
  2. FORM EMP, (SELECT EMPLID, COUNT(EMPLID) FROM EMP GROUP BY EMPLID) as TEMP
  3. WHERE EMP.EMPLID = TEMP.EMPLID
  4. AND TEMP.NB = 2





:heink:


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°212138
MagicBuzz
Posté le 11-09-2002 à 13:39:10  profilanswer
 

--greg-- a écrit a écrit :

select emplid, count(*) as c from table where c=2 group by emplid



Ha ouais ? On peut faire la condition direct sur le COUNT :??:

n°212140
--greg--
Posté le 11-09-2002 à 13:39:55  profilanswer
 

Le Breton a écrit a écrit :

Peut être que la fonction rownum pourrait m'aider mais je connais pas vraiment son utilité (je l'ai vu en me baladant sur le forum à la recherche de l'idée géniale)
Qqn aurait un rapide briefing à me faire dessus ?



quoi ça marche pas ma requete?


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°212141
--greg--
Posté le 11-09-2002 à 13:40:12  profilanswer
 

MagicBuzz a écrit a écrit :

Ha ouais ? On peut faire la condition direct sur le COUNT :??:



oué


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
mood
Publicité
Posté le 11-09-2002 à 13:40:12  profilanswer
 

n°212154
Le Breton
Posté le 11-09-2002 à 13:49:17  profilanswer
 

--greg-- a écrit a écrit :

select emplid, count(*) as c from table where c=2 group by emplid




 
Je me prends un invalid column name sur c...  :cry:

n°212157
Krueger
tout salaire demande dutravail
Posté le 11-09-2002 à 13:54:34  profilanswer
 

Faut utiliser HAVING:
 
SELECT emplid
FROM empl_t
GROUP BY emplid
HAVING COUNT(emplid) = 2;


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
n°212158
thegti
La constipation se soigne ...
Posté le 11-09-2002 à 13:55:17  profilanswer
 

Le niveau du forum a baissé ...
C'est pourtant simple:
 
select emplid
from table
group by emplid
having count(*)=2

n°212167
--greg--
Posté le 11-09-2002 à 13:59:30  profilanswer
 

:kaola:


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°212168
Krueger
tout salaire demande dutravail
Posté le 11-09-2002 à 14:00:24  profilanswer
 

Ben mince, j'aurais pas dû effacer mon post...

n°212169
Le Breton
Posté le 11-09-2002 à 14:00:39  profilanswer
 

MagicBuzz a écrit a écrit :

faudra rebidouiller un peu la requête, mais en gros :
 

Code :
  1. SELECT EMP.*
  2. FORM EMP, (SELECT EMPLID, COUNT(EMPLID) NB FROM EMP GROUP BY EMPLID) as TEMP
  3. WHERE EMP.EMPLID = TEMP.EMPLID
  4. AND TEMP.NB = 2






 
En tout cas, ta solution marche ! Merci  :bounce:

n°212170
HappyHarry
Posté le 11-09-2002 à 14:01:53  profilanswer
 

oh les tueurs avec des requetes de fous pour un truc aussi bateau ... m'etonne pas qu'apres ils arrivent avec la bouche en coeur et un "oh ben j'comprends pas, pourquoi ma requete mets 3 heures a s'executer"  :D

n°212173
Le Breton
Posté le 11-09-2002 à 14:04:02  profilanswer
 

thegti a écrit a écrit :

Le niveau du forum a baissé ...
C'est pourtant simple:
 
select emplid
from table
group by emplid
having count(*)=2




 
C'est en effet plus simple mais merci aux autres pour leur aide et surtout pour la reactivité !  :bounce:

n°212206
MagicBuzz
Posté le 11-09-2002 à 14:41:39  profilanswer
 

--greg-- a écrit a écrit :

oué
 




je suis de l'avis de kueger > avec having...
Parceque direct comme ça, je doute que ça marche... tu peux pas faire un filtre sur une donnée calculée dont le résultat peut dépendre du filtre...
 
pour count, chais pas, je m'en sert jamais. mais pour min() ou max() y'a pas moyen en tout cas.
peut-être avec un having... en tout cas ma méthode marche bien et n'est pas plus lente qu'une autre (selon les indexes qui sont créés ;))

n°212207
bozocarzu
Posté le 11-09-2002 à 14:42:22  profilanswer
 

thegti a écrit a écrit :

Le niveau du forum a baissé ...
C'est pourtant simple:
 
select emplid
from table
group by emplid
having count(*)=2




 
On ne peut pas etre bon partous  :D

n°212217
MagicBuzz
Posté le 11-09-2002 à 14:52:20  profilanswer
 

HappyHarry a écrit a écrit :

oh les tueurs avec des requetes de fous pour un truc aussi bateau ... m'etonne pas qu'apres ils arrivent avec la bouche en coeur et un "oh ben j'comprends pas, pourquoi ma requete mets 3 heures a s'executer"  :D  




Ouais ma c normal, plus habitué à faire des requêtes toutes simples...
 
La requête la plus lisible que j'aie dans le projet que je suis en train de faire c'est celle là :
 

Code :
  1. sqlSearch = "SELECT DISTINCT GENpro.pro_codpro AS pro_codpro, GENpro.fam_fampro AS fam_fampro, GENpro.fam_sfapro AS fam_sfapro, GENpro.fam_ssfpro AS fam_ssfpro, GENprm.prm_name AS Name, GENbrd.brd_libBrand AS Brand, GENpro.pro_codnew AS New, GENpro.pro_ecat AS ecat "&_
  2.   "FROM GENpro, GENprm, GENbrd, TABOURPROMO, GENBIT "&_
  3.   "WHERE GENprm.lan_codlan = ':Language' "&_
  4.   "AND GENprm.pro_codpro = GENpro.pro_codpro "&_
  5.   "AND GENpro.brd_codBrand = GENbrd.brd_codBrand " &_
  6.   "AND GENbit.cou_codpay = ':Country' "&_
  7.   "AND mod(trunc(GENpro.pro_cntdstb/power(2,GENbit.bit_pos), 0), 2) = 1 "&_
  8.   "AND GENpro.pro_codpro = TABOURPROMO.pro_codpro"

n°212272
Le Breton
Posté le 11-09-2002 à 15:48:07  profilanswer
 

Tu me rappeleras de.................................................................................................. ne pas postuler où to bosses  :lol:

n°212275
thegti
La constipation se soigne ...
Posté le 11-09-2002 à 15:56:11  profilanswer
 

MagicBuzz a écrit a écrit :

 
je suis de l'avis de kueger > avec having...
Parceque direct comme ça, je doute que ça marche... tu peux pas faire un filtre sur une donnée calculée dont le résultat peut dépendre du filtre...
 
pour count, chais pas, je m'en sert jamais. mais pour min() ou max() y'a pas moyen en tout cas.
peut-être avec un having... en tout cas ma méthode marche bien et n'est pas plus lente qu'une autre (selon les indexes qui sont créés ;))




 
Bien sur qu'elle est plus lente ta requête, elle fait 2 passes ... :sarcastic:

n°212287
--greg--
Posté le 11-09-2002 à 16:14:34  profilanswer
 

MagicBuzz a écrit a écrit :

 
je suis de l'avis de kueger > avec having...



oui, autant pour moi
(pourtant jpense l'avoir déjà fait mais jsais plus avec quelle db)


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°212337
MagicBuzz
Posté le 11-09-2002 à 17:30:19  profilanswer
 

thegti a écrit a écrit :

 
 
Bien sur qu'elle est plus lente ta requête, elle fait 2 passes ... :sarcastic:




Peut-être que sous Ingre ou MySQL elle est deux passes, mais sous Oracle ou SQL Server, elle ne fait qu'une passe. Y'a un optimiseur dans les SGBD c'est pas fait pour faire joli ;)
 
Et deplus, avec des indexes correctement créés, pas une seule ligne de la table n'est lue, donc faire une ou deux passes dans un arbre...

n°212369
bob20000
Posté le 11-09-2002 à 17:48:54  profilanswer
 

--greg-- a écrit a écrit :

oui, autant pour moi
(pourtant jpense l'avoir déjà fait mais jsais plus avec quelle db)




 
pourquoi tu as dejà utiliser beaucoup de db?

n°212375
--greg--
Posté le 11-09-2002 à 18:01:01  profilanswer
 

bob20000 a écrit a écrit :

 
 
pourquoi tu as dejà utiliser beaucoup de db?



nan pas tant que ça:)
(je te vois venir toi :D)


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°212617
bob20000
Posté le 12-09-2002 à 09:30:08  profilanswer
 

--greg-- a écrit a écrit :

nan pas tant que ça:)
(je te vois venir toi :D)




 :pt1cable:  tu as dejà utilise quel base alors?

n°212659
thegti
La constipation se soigne ...
Posté le 12-09-2002 à 10:06:42  profilanswer
 

MagicBuzz a écrit a écrit :

 
Peut-être que sous Ingre ou MySQL elle est deux passes, mais sous Oracle ou SQL Server, elle ne fait qu'une passe. Y'a un optimiseur dans les SGBD c'est pas fait pour faire joli ;)
 
Et deplus, avec des indexes correctement créés, pas une seule ligne de la table n'est lue, donc faire une ou deux passes dans un arbre...




 
:lol: L'optimiseur, il refait ta requête ?
Tu peut même mettre 10 fois la table dans ton from, le SGBD il optimise tout seul pour faire une seule passe ... :sarcastic:
Fait les deux requêtes et affichent les plans d'éxécution, ou mieux encore affichent des temps d'éxécution avec une grosse table, tu verras direct la différence. ;)

n°212869
--greg--
Posté le 12-09-2002 à 13:58:26  profilanswer
 

bob20000 a écrit a écrit :

 
 :pt1cable:  tu as dejà utilise quel base alors?



mysql, interbase, oracle, mssql
mais pour ce que j'ai dis plus haut j'ai pê revé aussi :D


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] aide sur un SELECT

 

Sujets relatifs
Requête SQL : clause avec 2 valeurs, c'est possible ?Besoin d'aide pour site sous php forge
[PHP / pb types MIME] à l'aide avec un powerpoint[M$-SQL] Procedure, openfile, etc... chuis perdu...
[Postgres-ECPG] Select multiple[PHP] Afficher les resultats d'une requeste SQL sur deux colonnes
[SQL][Oracle]Besoin d'aide pour une requête![dephi] problème d'exécution de resquêtes SQL
Pb sur un check de select 
Plus de sujets relatifs à : [SQL] aide sur un SELECT


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR