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

Langage SQL Discussion :

Limiter les retours d'une sous-requête


Sujet :

Langage SQL

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Points : 460
    Points
    460
    Par défaut Limiter les retours d'une sous-requête
    Bonsoir à vous.

    Je coince depuis à un moment sur un problème tout bête (je présume)...
    Je précise que je ne maîtrise pas SQL...

    Voici mon cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     SELECT
        "Dossier",
        int_seq AS "ITV N°"
     
    FROM
        intervention
     
        LEFT OUTER JOIN 
            (SELECT 
                itvlien_intervention AS "Lien",
                dos_chrono AS "Dossier"
            FROM
                interv_lien
                LEFT OUTER JOIN dossier ON dos_chrono=itvlien_cle
            WHERE
                itvlien_table = 'dossier' ) AS "Infos" ON "Lien"=int_seq
     
    WHERE 
        inter_nom LIKE '*SLE*'
     
    ORDER BY
        "ITV N°"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dossier	ITV N°
    NULL	16910
    14368	17812
    15233	19000
    15233	19001
    15233	19002
    Cela fonctionne bien, cela m'affiche bien mes 2 colonnes demandées.

    Mon soucis est dans la sous requête de "Infos", en effet cette requête peut me renvoyer aucune ligne (pas de problème), 1 ligne (parfait), 2 ou 3 lignes (et là ça va plus...).
    J'ai donc testé pas mal de truc en indiquant à ma sous requête de ne renvoyer qu'une valeur via un ORDER BY suivi d'un LIMIT mais là, je ne me retrouve qu'avec des valeurs nulles...
    J'ai du mal à piger pourquoi...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dossier	ITV N°
    NULL	16910
    NULL	17812
    NULL	19000
    NULL	19001
    NULL	19002
    Avez vous une idée de comment résoudra mon problème ? Et pouvez vous me dire pourquoi lorsque j'ajoute un LIMIT 1, je me retrouve avec que des valeurs nulles ?!

    Merci à vous et bonne fin de journée !
    Sous Kubuntu 20.04

  2. #2
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 152
    Points : 7 402
    Points
    7 402
    Billets dans le blog
    1
    Par défaut
    Déjà, évite de passer par une sous requête pour faire ça.
    Une simple jointure sera plus lisible, maintenable, et probablement plus performante.

    Ensuite, ce que tu veux, c'est récupérer la première ou la dernière intervention pour chaque dossier.

    Un MIN/MAX OVER PARTITION BY devrait t'aider à résoudre ton problème.
    On ne jouit bien que de ce qu’on partage.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Points : 460
    Points
    460
    Par défaut
    Salut, merci pour ta réponse.

    En fait je passe par une sous requête car je ne voyais pas comment faire autrement pour appliquer une limite.

    Pour le coup je ne connais pas du tout ce que tu me proposes, mes recherches ne m'aident pas vraiment à piger le truc... pourrais tu me le détailler s'il te plaît ?
    Sous Kubuntu 20.04

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Points : 460
    Points
    460
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     SELECT
        MAX(dos_chrono),
        int_seq AS "ITV N°"
     
    FROM
        intervention 
        LEFT OUTER JOIN interv_lien ON itvlien_intervention = int_seq
        LEFT OUTER JOIN interv_lien ON dos_chrono = itvlien_cle AND itvlien_table = 'dossier'
     
    WHERE 
        inter_nom LIKE '*SLE*'
     
    GROUP BY
        "ITV N°"
     
    ORDER BY
        "ITV N°"
    Suite à ta remarque, je suis parti sur la suppression de la sous requête et il semble que le résultat soit fonctionnel

    Merci
    Sous Kubuntu 20.04

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

Discussions similaires

  1. Utiliser les résultats d'une sous-requête
    Par BBric dans le forum Requêtes
    Réponses: 6
    Dernier message: 22/04/2011, 01h19
  2. Limiter les résultats d'une zone de liste déroulante (requête)
    Par Tipstitou dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 11/02/2008, 11h01
  3. Contourner le non-support de limit dans une sous-requête
    Par Christophe Charron dans le forum Requêtes
    Réponses: 7
    Dernier message: 04/09/2007, 10h45
  4. Sélection de tous les champs d'une sous-Requête que je redéfini
    Par electrosat03 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 28/06/2007, 16h43
  5. Limiter les résultats d'une requête à \today\' - n jours
    Par Eddy Duflos dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/10/2005, 08h46

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