Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/02/2011, 18h11   #1
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
Par défaut Pb dans une requete avec un IN

Bonjour a tous

j'ai une requete assez complexe qui integre une clause WHERE qui contient un EXISTS integrant une clause IN


Voici la requete :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT N_Bague.Id_Centre,
       N_Bague.Bague_Lettre,
       N_Data.Id_Bird
  FROM N_Data
    INNER JOIN N_Session S ON (S.Id_Session = N_Data.Id_Session AND S.Actif = 1 AND N_Data.Actif = 1)
    INNER JOIN N_Bird ON (N_Bird.Id_Bird = N_Data.Id_Bird AND N_Bird.Actif = 1)
    INNER JOIN N_Marquage ON (N_Marquage.Id_Bird = N_Bird.Id_Bird)
    INNER JOIN N_Bague ON (N_Bague.Id_Bague = N_Marquage.Id_Bague)
  WHERE N_Bague.Id_Centre = :Id_Bagueur
          AND NOT(EXISTS(SELECT 1
                           FROM Ps_Fb_Lieudit_Pere(S.Id_Lieudit, 0)
                           WHERE Ps_Fb_Lieudit_Pere.Id_Fils IN (1011, 1009 )))
Cette requete fonctionne parfaitement

Mais si je veux remplacer
Citation:
1011, 1009
par le resultat d'une requetre qui donne ce resultat,

Code :
1
2
3
 SELECT LIST(P_Centre_Pays.Id_Etat)
        FROM P_Centre_Pays
        WHERE P_Centre_Pays.Id_Centre IN (101, 102)
resultat :

Citation:
1011,1009
pour obtenir la nouvelle requete suivante :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT N_Bague.Id_Centre,
       N_Bague.Bague_Lettre,
       N_Data.Id_Bird
  FROM N_Data
    INNER JOIN N_Session S ON (S.Id_Session = N_Data.Id_Session AND S.Actif = 1 AND N_Data.Actif = 1)
    INNER JOIN N_Bird ON (N_Bird.Id_Bird = N_Data.Id_Bird AND N_Bird.Actif = 1)
    INNER JOIN N_Marquage ON (N_Marquage.Id_Bird = N_Bird.Id_Bird)
    INNER JOIN N_Bague ON (N_Bague.Id_Bague = N_Marquage.Id_Bague)
  WHERE N_Bague.Id_Centre = :Id_Bagueur
          AND NOT(EXISTS(SELECT 1
                           FROM Ps_Fb_Lieudit_Pere(S.Id_Lieudit, 0)
                           WHERE Ps_Fb_Lieudit_Pere.Id_Fils IN (SELECT LIST(P_Centre_Pays.Id_Etat)
                                                                  FROM P_Centre_Pays
                                                                  WHERE P_Centre_Pays.Id_Centre IN (101, 102))))
le resultat de la requete est totalement different !!!


quelle betise ai-je faite ?

Merci d'avance

olivier
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 19h21   #2
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Bonjour,

Enlevez le LIST tout simplement.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT N_Bague.Id_Centre,
       N_Bague.Bague_Lettre,
       N_Data.Id_Bird
  FROM N_Data
    INNER JOIN N_Session S ON (S.Id_Session = N_Data.Id_Session AND S.Actif = 1 AND N_Data.Actif = 1)
    INNER JOIN N_Bird ON (N_Bird.Id_Bird = N_Data.Id_Bird AND N_Bird.Actif = 1)
    INNER JOIN N_Marquage ON (N_Marquage.Id_Bird = N_Bird.Id_Bird)
    INNER JOIN N_Bague ON (N_Bague.Id_Bague = N_Marquage.Id_Bague)
  WHERE N_Bague.Id_Centre = :Id_Bagueur
          AND NOT(EXISTS(SELECT 1
                           FROM Ps_Fb_Lieudit_Pere(S.Id_Lieudit, 0)
                           WHERE Ps_Fb_Lieudit_Pere.Id_Fils IN (SELECT P_Centre_Pays.Id_Etat
                                                                  FROM P_Centre_Pays
                                                                  WHERE P_Centre_Pays.Id_Centre IN (101, 102))))
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2011, 08h55   #3
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
merci barbibulle



quel imbecile je fais, alors que j'ai deja pls requetes qui fonctionnent sous cette forme ...


merci encore

olivier
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h03.


 
 
 
 
Partenaires

Hébergement Web