2009-10-27 17 views
0

J'ai un SQL comme ceci:Comment écrire sous-requête dans Critères

Select tbl.id, tbl.name 
From 
(select table1.id, table1.name 
from table1 
inner join table2 on table1.id = table2.id 
order by table2.priority 
) tbl 
group by table1.id 
order by table1.name 

Ce que je suis en train de réaliser est d'abord tri (ordre par table2.priority), puis obtenir le record avec table1.id, name avec la plus haute priorité . Remarque, MAX(table2.priority) ne fonctionne pas ici, parce que table1-table2 est un à plusieurs, et pour un enregistrement table1, table2 peut avoir N enregistrements avec la plus haute priorité = 1, où un autre record table1 avec la plus haute priorité = 3.

Répondre

0

Si vous n'avez besoin que d'un enregistrement du résultat, et qu'ils sont en ordre de sorte que l'enregistrement dont vous avez besoin soit à la fin (ou au début) du tri, limitez simplement les résultats à un. i.e.:

SELECT tbl.id, tbl.name 
FROM (
    SELECT table1.id, table1.name 
    FROM table1 
    INNER JOIN table2 ON table1.id = table2.id 
    ORDER BY table2.priority 
) tbl 
GROUP BY table1.id 
ORDER BY table1.name 
LIMIT 1; 

Notez que selon l'ordre, vous pouvez spécifier ASC ou DESC pour assurer l'enregistrement correct est celui que vous récupérez.