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 :

Select MAX sur plusieurs table sans group by


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 19
    Points : 8
    Points
    8
    Par défaut Select MAX sur plusieurs table sans group by
    J'ai les tables suivantes :

    Table1
    id1 nom1
    1 Etape1
    2 Etape2
    3 Etape3
    4 Etape4


    Table2
    id2 nom2
    1 description1
    2 description2
    3 description3


    Table_assoc
    id1 id2
    1 1
    2 1
    3 1
    1 2
    2 2
    1 3
    2 3
    3 3
    4 3


    J'ai comme contrainte de ne pas utiliser de group by et je dois avoir le résultat :
    nom2 MAX nom1
    description1 etape3
    description2 etape2
    description3 etape4


    C'est le sans GROUP BY, juste avec des select, from, where qui me cause problème ... quelqu'un peut m'aider ?

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 152
    Points : 1 939
    Points
    1 939
    Par défaut
    Bonjour,

    Si tu ne peux pas utiliser GROUP BY j'espère que tu peux utiliser les fonctions analytiques. Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select table2.nom2, table1.nom1
    from table2
    join (select id1, id2, row_number() over (partition by id2 order by id1 desc) as rn from table_assoc) as v on v.id2 = table2.id2 and v.rn = 1
    join table1 on table1.id1 = v.id1
    order by 1;

  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    bonjour,

    ça ressemble a un exercice

    Un indice : Le MAX, c'est celui pour lequel il n'existe pas de plus grand !

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 874
    Points : 53 048
    Points
    53 048
    Billets dans le blog
    6
    Par défaut
    Autre solution, utiliser l'opérateur ALL avec >= et une sous requête.

    A +

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 874
    Points : 53 048
    Points
    53 048
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select T1.nom1, T2.nom2
    from   table1 AS T1
           join table_assoc AS TA ON T1.id1 = TA.id1
           join table2 AS T2.id2 = v.id1
    WHERE  T2.nom2 >= ALL (SELECT T2.nom2 
                          FROM   table2 AS T 
                          WHERE T.Id2 = T2.id2)
    order by 1;
    A +

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    En fait présentement j'avais le code suivant qui fonctionne bien, sauf qu'il me donne le id1 au lieu du nom1, est-ce que je peux faire en sorte qu'il m'affiche aussi le nom1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T2.nomProjet, (SELECT MAX (TA.id1)
    FROM Table_Assoc TA
    WHERE T2.id2 = TA.id2)
    FROM Table2 T2
    ;
    Présentement je reçois le résultat suivant :
    Description1 id3
    Description2 id2
    Description3 id4


    Mais j'aurais besoin qu'il me renvoit :
    Description1 etape3
    Description2 etape2
    Description3 etape4

    ou encore :
    Description1 id3 etape3
    Description2 id2 etape2
    Description3 id4 etape4

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    OK, trouvé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T2.nom2,  T1.nom1
        From Table2 T2, Table1 T1
        WHERE T1.id1= (SELECT Max (TA.id1) FROM Table_Asso TA WHERE T2.id2 = TA.idProjet)
    ;

  8. #8
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    A noter que cette requête fait un GROUP BY () implicite (dans la sous requête)...

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

Discussions similaires

  1. select sur plusieurs table sans jointure
    Par oska06 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/09/2008, 11h04
  2. Réponses: 5
    Dernier message: 10/05/2008, 18h11
  3. SELECT Complexe sur plusieurs tables
    Par eowene dans le forum Langage SQL
    Réponses: 6
    Dernier message: 16/01/2007, 14h43
  4. [Oracle] Plusieurs select max() sur plusieurs tables
    Par Xavier2701 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/06/2006, 17h36
  5. select multiple sur plusieurs tables
    Par syl2095 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/12/2004, 15h48

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