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

Requêtes PostgreSQL Discussion :

Prob visibilité dans un select


Sujet :

Requêtes PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 26
    Par défaut Prob visibilité dans un select
    Bonjour à tous, voilà mon problème.
    Je veux dans une requête pouvoir faire plusieurs count different avec jointure, j'ai donc choisi de faire un SELECT dans mes jointures mais je suis bloqué à ce niveau là.


    exemple de ce qui bloque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT t1.id, nb FROM table1 t1 
         JOIN table2 t2 ON (t1.id=t2.id)
         LEFT JOIN 
               (SELECT id, count(id) AS nb FROM table3 WHERE t2.date=date GROUP BY id)
               t3 ON (t1.id=t3.id)
    Le problème est donc que t2 n'est pas visible dans le second SELECT, mais je ne trouve pas la solution pour contourner le problème...

    (Je veux dans l'exemple récupérer le nombre d'entrée dans la table3 pour la date t2.date)

    Merci d'avance pour le coup de main

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    t2.date=date est apparemment une condition de jointure. Dans ce cas pourquoi la mettre dans le WHERE de t3 au lieu de la mettre dans le ON (...) du JOIN?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 26
    Par défaut
    Si j'ai bien compris, tu proposes de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT t1.id, nb FROM table1 t1 
         JOIN table2 t2 ON (t1.id=t2.id)
         LEFT JOIN 
               (SELECT id, count(id) AS nb FROM table3 GROUP BY id)
               t3 ON (t1.id=t3.id AND t2.date=t3.date)
    Malheureusement dans ce cas là la date de t3 n'existe pas car je ne la récupère pas dans le select de plus mon count(id) va faire un count de tte les entrées pour ttes les dates de id, mais je ne veux le count des id que pour une date présente dans t2 (Je sais pas trop si je suis clair..^^)

    Pour que la requete marche je dois rajouter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            (SELECT id, date, count(id) AS nb FROM table3 GROUP BY id, date)
    Mais dans ce cas là ce que me retourne le select n'est plus utilisable (car group by date)

    Je me trompe peut être mais en tout cas pour le moment le résultat n'est pas bon ^^ Je suis un peu perdu désolé !

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Citation Envoyé par saturne77 Voir le message
    Pour que la requete marche je dois rajouter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            (SELECT id, date, count(id) AS nb FROM table3 GROUP BY id, date)
    Mais dans ce cas là ce que me retourne le select n'est plus utilisable (car group by date)
    Il s'agit juste de décaler le moment dans l'exécution où les dates sont filtrées pour ne garder que celles qui correspondent à des entrées de t2. Ca ne doit pas rendre le résultat inutilisable. Mais l'ordre du GROUP BY me parait illogique. Il ne faudrait pas plutôt grouper d'abord par date, puis par id dans la sous-requête ci-dessus?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 26
    Par défaut
    Lorsque je change l'ordre ma requête me retourne plusieurs résultat par id >< alors que je cherche à en avoir que un seul par id.

    Parce que je suis un peu perdu j'ai voulu repartir sur une base de qqch qui marche. Voilà un bout de code qui marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT t1.id, count(t3.date) FROM table1 t1
    	JOIN table2 t2 ON (t2.id=t1.id)
    	LEFT OUTER JOIN table3 t3 ON (t3.id = t1.id AND date(t2.date) = date(t3.date))
    GROUP BY t1.id
    ORDER BY t1.id
    Malheureusement si je veux faire plusieurs count et join je ne peux plus utiliser cette méthode... C'est pour cela que je me suis mis à chercher du côté du SELECT dans le JOIN. Mais bon, pour le moment je suis toujours dans le mur !

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Tu n'aurais pas un jeu d'essai sous la main? Avec les valeurs de départ des tables et les résultats souhaités pour la requête, il sera peut-être plus simple de trouver le chemin entre les deux

Discussions similaires

  1. formater un champ date dans un select
    Par sbeu dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 24/04/2006, 17h44
  2. [interbase][SQL] concatener 2 champs dans le select
    Par Harry dans le forum Bases de données
    Réponses: 10
    Dernier message: 09/03/2006, 07h45
  3. Joindre une valeur arbitraire dans un SELECT
    Par Tuxxy dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/01/2004, 18h04
  4. Réponses: 3
    Dernier message: 23/09/2003, 10h12
  5. [Sybase] Select dans une select loop en C
    Par Claudio dans le forum Sybase
    Réponses: 2
    Dernier message: 29/04/2003, 19h06

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