IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Firebird Discussion :

Pb dans une requete avec un IN


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    1011, 1009
    par le resultat d'une requetre qui donne ce resultat,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     SELECT LIST(P_Centre_Pays.Id_Etat)
            FROM P_Centre_Pays
            WHERE P_Centre_Pays.Id_Centre IN (101, 102)
    resultat :

    1011,1009
    pour obtenir la nouvelle requete suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre Expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 052
    Par défaut
    Bonjour,

    Enlevez le LIST tout simplement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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))))

  3. #3
    Membre Expert
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Par défaut
    merci barbibulle



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


    merci encore

    olivier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/05/2008, 16h44
  2. Réponses: 5
    Dernier message: 06/02/2007, 13h46
  3. [MySQL] Erreur dans une requête avec jointures
    Par bobic dans le forum Langage SQL
    Réponses: 17
    Dernier message: 03/08/2006, 13h04
  4. Somme dans une requete avec regroupement
    Par louroulou dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 19/07/2006, 21h20
  5. Calculs dans une requete avec conditions multiples
    Par Sha1966 dans le forum Access
    Réponses: 3
    Dernier message: 13/01/2006, 15h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo