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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Resolu :Sql : probleme de requete (Subquery returns more than 1 row)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Resolu :Sql : probleme de requete (Subquery returns more than 1 row)

n°2163792
mozvillat
Posté le 13-11-2012 à 16:36:16  profilanswer
 

Bonjour à tous,
 
Je rencontre un petit probleme avec une requete SQL.
Je vais essayer d'expliquer clairement la structure de la base et surtout le resultat escompté de cette requete !
 
Je développe un petit logiciel permettant de gérer les périodes de congés. Une table reprend les coordonnées des collegues (nom, prenom, login, mdp, personne en charge de valider leur conges).
Une seconde table enregistre les demandes de conges avec leur statut (1 = valide, 2=refuse, 3=en attente) ainsi que les dates demandées.
 
Je dois pouvoir extraire les agents ayant le même valideur + les demandes du valideur lui même (afin de reprendre les demandes du même service).
 
Actuellement ma requete ressemble à ca (mais me retourne Subquery returns more than 1 row)
 

Code :
  1. SELECT * from conges WHERE id_agent=(SELECT id_agent from agent WHERE id_valideur = 'mdupont')  AND statut_demande = '1' AND MONTH( date_deb ) = '11' OR statut_demande = '1' AND MONTH( date_fin ) = '11' OR id_agent='mdupont' AND statut_demande = '1' AND MONTH( date_deb ) = '11' OR id_agent='mdupont' AND statut_demande = '1' AND MONTH( date_fin ) = '11'


 
cette requete devrait m'indiquer les agents validés par mdupont et les conges de mdupont etant validés et posés sur la periode de novembre...
 
Quelqu'un aurait il une idee de ce qui bloque ?
 
Merci d'avance.


Message édité par mozvillat le 14-11-2012 à 09:27:26
mood
Publicité
Posté le 13-11-2012 à 16:36:16  profilanswer
 

n°2163871
vave
Nice to meet me
Posté le 14-11-2012 à 09:00:02  profilanswer
 

Bonjour,
 
Et si tu fais ça, ça te renvoie quelle valeur ?

Code :
  1. SELECT count(id_agent) from agent WHERE id_valideur = 'mdupont'


 
Sinon, tu peux faire avec un join :

Code :
  1. SELECT * from conges
  2. inner join agent on conges.id_agent = agent.id_agent and id_valideur = 'mdupont' 
  3. where (statut_demande = '1' AND MONTH( date_deb ) = '11')
  4. OR (statut_demande = '1' AND MONTH( date_fin ) = '11')
  5. OR (id_agent='mdupont' AND statut_demande = '1' AND MONTH( date_deb ) = '11')
  6. OR (id_agent='mdupont' AND statut_demande = '1' AND MONTH( date_fin ) = '11')


 


---------------
Bel ours Vave, je me dois de l’admettre. -Skyl"win"-  Mais toi tu es intelligent -Homerde- - Ce génie -SkylWINd- JDD S16M72 10:43:46 GMT-DTC +1
n°2163872
x1fr
Posté le 14-11-2012 à 09:05:29  profilanswer
 

Pour la première partie, puisque ta sous-requête retourne plusieurs lignes, il faut utiliser "id_agent in" au lieu de "id_agent=" :

 
Code :
  1. SELECT * from conges WHERE id_agent=(SELECT id_agent from agent WHERE id_valideur = 'mdupont')
 

Sinon pour la requête en elle même, je pense qu'il est possible de la simplifier un peu, un truc du genre :

 
Code :
  1. SELECT *
  2. FROM conges
  3. WHERE id_agent IN (
  4.     SELECT id_agent FROM agent WHERE id_valideur = 'mdupont' OR id_agent='mdupont' )
  5. AND statut_demande = '1'
  6. AND (
  7.     MONTH( date_deb ) = '11'
  8.     OR MONTH( date_fin ) = '11')
 

Après tu peut même faire une procédure stockée prenant en paramètre le mois et l'id_agent


Message édité par x1fr le 14-11-2012 à 09:06:19

---------------
Origin / PSN / Steam / Uplay : x1fr - bnet : Fab#2717
n°2163874
mozvillat
Posté le 14-11-2012 à 09:27:00  profilanswer
 

Merci pour ces précisons ! c'est la que je me rend compte : pourquoi faire compliqué quand on peut faire simple !!!!

n°2164085
rufo
Pas me confondre avec Lycos!
Posté le 15-11-2012 à 11:07:49  profilanswer
 

Quand c'est possible, éviter les OR : ça pourrit les perfs :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

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

  Resolu :Sql : probleme de requete (Subquery returns more than 1 row)

 

Sujets relatifs
Probleme affichage entre IE et mozillaProblème installation cygwin
probléme JAVA: Interface Graphique , l’interaction des boutons[Shell] Problème script dans script
[C] PIC18F2580 problème sortie inverséeProblème VBA/VBS
probleme avec fgets()Probléme syntaxe macro excel 4
Problème RobotProgProbleme avec une ligne,dont je ne comprend pas
Plus de sujets relatifs à : Resolu :Sql : probleme de requete (Subquery returns more than 1 row)


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