0 votes

Concevoir une requête pour le scénario suivant

J'ai deux tables - Table1 :

id  name  number
------------------
1   x1    123
2   x2    234

...et le tableau 2 :

tbl1id  title  rank
--------------------
1       t1      3
1       t2      2
2       t1      3
1       t3      1

Existe-t-il un moyen de les joindre pour retourner le résultat en montrant le titre maximum basé sur le rang minimum pour un utilisateur donné ?

id  name  number  max_title  rank
----------------------------------
1   x1    123     't3'        1
2   x2    234     't1'        3

question mise à jour !

2voto

OMG Ponies Points 144785

Utilisez :

   SELECT t.id,
          t.name,
          t.number,
          COALESCE(x.max_title, 'no title associated') AS max_title
     FROM TABLE1 t
LEFT JOIN (SELECT t2.tbl1id,
                  MAX(t2.title) 'max_title'
             FROM TABLE2 t2
            WHERE t2.rank = (SELECT MIN(rank) 
                               FROM TABLE2 
                              WHERE tbl1id = t2.tbl1id)
         GROUP BY t2.tbl1id) x ON x.tbl1id = t.id

0voto

AdaTheDev Points 53358
SELECT t1.id, t1.name, t1.number, MAX(t2.title)
FROM Table1 t1
    LEFT JOIN Table2 t2 ON t1.id = t2.tbl1id
GROUP BY t1.id, t1.name, t1.number

EDIT :
- mise à jour pour utiliser LEFT JOIN au cas où il n'y aurait pas d'enregistrement dans la table 2 pour un id donné.
- La réponse n'est plus pertinente car la question a changé depuis l'original. A laisser pour l'histoire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X