Как написать подзапрос в Критерии - PullRequest
0 голосов
/ 28 октября 2009

У меня есть такой SQL:

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

Я пытаюсь сначала отсортировать (упорядочить по table2.priority), а затем получить запись с table1.id, name с наивысшим приоритетом. Обратите внимание, что MAX(table2.priority) здесь не работает, потому что от table1 до table2 - от одного ко многим, и для одной записи таблицы table1 таблица может иметь N записей с наивысшим приоритетом = 1, где другая запись таблицы table1 с наивысшим приоритетом = 3.

1 Ответ

0 голосов
/ 28 октября 2009

Если вам нужна только одна запись из результата, и они расположены таким образом, что нужная запись находится в конце (или начале) сортировки, просто ограничьте результаты одной. то есть:

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;

Обратите внимание, что в зависимости от заказа вы можете указать ASC или DESC, чтобы обеспечить получение правильной записи.

...