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

Hibernate Java Discussion :

sous requête complexe


Sujet :

Hibernate Java

  1. #1
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 153
    Points : 107
    Points
    107
    Par défaut sous requête complexe
    Bonjour à tous,
    Pour optimiser mes requêtes, je cherche à utiliser les capacités de du SGDB au lieu de faire tourner du java sur de multiples requêtes.
    Mon problème est le suivant : j'ai 3 tables
    • tableA : idA | zone
    • tableB : idB | idA | idC | stade
    • tableC : idC | dateDebut | dateFin

    le but est d'obtenir le résultat suivant :
    zoneX | stadeY | count(idA de stade Y pour zone X)
    zoneX | stadeZ | count(idA de stade Z pour zone X)
    zoneY | stadeY | count(idA de stade Y pour zone Y)
    ...

    Ca parait simple mais j'ai n lignes de B pour chaque A et il me faut prendre le stade dans la ligne de B ayant le plus grand idB.

    Il faut également ne récupérer que les lignes dont les dates se situent par rapport à une demande de période telle que (dateSortie is null or dateSortie >= debut) and dateEntree <= fin)

    Je part donc sur un
    select A.idA, A.zone, B.stade from tableA as A left join A.tableB as B left join B.tableC as C where (dateSortie is null or dateSortie >= debut) and dateEntree <= fin)
    mais là j'ai toutes mes lignes de B

    J'ai donc tenté des fenêtrages :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select A.idA, A.zone, B.stade from 
    (select A.idA,A.zone,B.idB,B.stade,MAX(idB) over (partition by idA) as maxIdB 
    from tableA as A left join A.tableB as B left join B.tableC as C 
    where (C.dateSortie is null or C.dateSortie >= :debut) and dateEntree <= :fin))
    where B.idB = maxIdB
    mais le me fait une QuerySyntaxException il ne veut pas de () direct.

    En ce moment je ne m'occupe pas encore des dates et je suis obligé de récupérer dans une liste Java mon résultat sur A puis de boucler dessus pour faire une requête sur B à chaque ligne, ça bouffe de la ressource !

    Merci d'avance pour votre aide

  2. #2
    Membre confirmé
    Avatar de Laine
    Femme Profil pro
    Doctorat informatique
    Inscrit en
    Mars 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorat informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 238
    Points : 646
    Points
    646
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select A.idA, A.zone, B.stade from 
    (select A.idA,A.zone,B.idB,B.stade,MAX(idB) over (partition by idA) as maxIdB 
    from tableA as A left join A.tableB as B left join B.tableC as C 
    where (C.dateSortie is null or C.dateSortie >= :debut) and dateEntree <= :fin))
    where B.idB = maxIdB
    Regarde bien ta requête, il me semble qu'il y'a une parenthèse de trop

  3. #3
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 153
    Points : 107
    Points
    107
    Par défaut
    Pas si simple que ça, ça ne fonctionne pas plus.

    Le pire : je viens de me rendre compte que mon environnement de développement utilise firebird 2.5, que je ne peux pas passer en 3, et visiblement il n'y a pas de fonction de fenêtrage avant la version 3 (si j'ai compris mes infos glanées sur le net anglophone)

    il me faut donc partir sur des sous-requêtes sans ce type d’agrégation, je m'y remets !

Discussions similaires

  1. Requête et sous-requête complexes - limites de MySQL
    Par flashguitou dans le forum Requêtes
    Réponses: 4
    Dernier message: 06/06/2014, 02h23
  2. Problème sous-requête complexe
    Par Soucmic dans le forum Développement
    Réponses: 11
    Dernier message: 02/05/2013, 08h51
  3. Requête complexe sous base de donnée oracle
    Par hxcstyle dans le forum Langage SQL
    Réponses: 1
    Dernier message: 20/08/2009, 01h36
  4. Requête complexe sur plusieurs table
    Par DenPro dans le forum Langage SQL
    Réponses: 13
    Dernier message: 25/11/2003, 17h50
  5. Réponses: 3
    Dernier message: 18/05/2003, 00h16

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