[RESOLU] Aide à la création d'une petite requête SQL

Petit nouveau ! | 2 Messages

16 juil. 2013, 10:25

Bonjour à tous,

j'ai un souci pour créer une requete qui pourtant ne parait pas trop compliquée. Le contexte est le suivant :
j'ai 3 tables : societe, incident, contrat

Je souhaite connaitre la liste des societes chez qui le contrat est actif et chez qui il n'y a eu aucun incident depuis 365 jours.

Le champ NO_SOCIETE est présent dans les 3 tables.

Table SOCIETE
NO_SOCIETE, NO_SOCIETE

Table CONTRAT
NO_SOCIETE, COD_ETAT

Table INCIDENT
NO_SOCIETE, CREER_LE

J'ai essayé ça mais ça ne correspond pas :
select NO_SOCIETE,NOM from societe
where not exists 
   (
   select * from incident 
   where (incident.NO_SOCIETE=societe.NO_SOCIETE) 
   and (incident.CREER_LE < DATEADD(day,-365,getdate()))
   )
   and exists 
   (select * from CONTRAT
    where (contrat.NO_SOCIETE=societe.NO_SOCIETE)
    and (contrat.COD_ETAT='01') 
   )

Merci d'avance pour vos réponses.

Jujunio.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

16 juil. 2013, 20:56

salut,

utilise plutôt not in sur la clef primaire

quelque chose comme ça
SELECT NO_SOCIETE, NOM
  FROM societe
 WHERE NOT in (SELECT no_societe
                 FROM incident
                WHERE (incident.NO_SOCIETE = societe.NO_SOCIETE)
                  AND (incident.CREER_LE < DATEADD(day, -365, getdate()))
               
               union all
               
               SELECT no_societe
                 FROM CONTRAT
                WHERE (contrat.NO_SOCIETE = societe.NO_SOCIETE)
                  AND (contrat.COD_ETAT = '01'))

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 2 Messages

17 juil. 2013, 12:01

Merci Moogli.

Effectivement avec le NOT IN j'arrive à récupérer mes informations.

Voici ma requete finale :
SELECT distinct(SOCIETE.NO_SOCIETE),NOM,CP,VILLE,TELEPHONE  FROM societe
WHERE (NO_SOCIETE NOT IN 	 (
SELECT distinct(no_societe) FROM incident
WHERE (incident.NO_SOCIETE = societe.NO_SOCIETE)
AND (incident.CREER_LE > DATEADD(day, -365, getdate()))   )      )

AND ( no_societe IN   ( 
SELECT no_societe FROM CONTRAT 
WHERE (contrat.NO_SOCIETE =SOCIETE.NO_SOCIETE)
AND (contrat.COD_ETAT = '01')
	   )	 )   
order by CP		
Encore merci pour tout. Très bien ce forum !

A bientôt.

Jujunio

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

18 juil. 2013, 22:36

Modération :
Si ta question est résolue, pense à l'indiquer pour que les futures personnes qui voudront consulter ce sujet sachent qu'il contient une solution.
Tu peux réaliser cette opération toi-même en cliquant sur le bouton vert "Mettre le sujet en tant que Résolu" situé en haut de la page à côté du titre du sujet.
Il en faut peu pour être heureux ......