Здравствуйте, strcpy, Вы писали:
S>В hibernate есть язык запросов HQL. S>Вопрос: можно ли в HQL сделать INNER JOIN двух различных SELECT-ов?
вопрос выглядит некорректно (джойнятся отношения, т.е. таблицы/вьюхи, а не селекты)
можешь написать, как ты представляешь то, что ты хочешь сделать, в терминах SQL?
Здравствуйте, C0s, Вы писали:
S>>В hibernate есть язык запросов HQL. S>>Вопрос: можно ли в HQL сделать INNER JOIN двух различных SELECT-ов?
C0s>вопрос выглядит некорректно (джойнятся отношения, т.е. таблицы/вьюхи, а не селекты) C0s>можешь написать, как ты представляешь то, что ты хочешь сделать, в терминах SQL?
А чем SELECT принципиально отличается от вьюхи?
select * from (select id1, field1) a
inner join (select id2,field2 from table2) b on a.id1 = b.id2
Правда в контексте гибера такая конструкция выглядит странно.
Как и обещал, объясняю что мне нужно. Всё упростил до нЕльзя:
Есть таблица с полями: Department, Name, Age. Как получить список самых старых сотрудников по отделению с возрастами. То есть вычеркнуть из таблицы всех тех, для кого в данном подразделении есть более старый человек. Как такое сделать на HQL причём эффективно, так как таблица очень большая?
Спасибо.
Удвой число ошибок, если не получается добиться цели.
Здравствуйте, strcpy, Вы писали:
S>Есть таблица с полями: Department, Name, Age. Как получить список самых старых сотрудников по отделению с возрастами. То есть вычеркнуть из таблицы всех тех, для кого в данном подразделении есть более старый человек. Как такое сделать на HQL причём эффективно, так как таблица очень большая?
если запрос случается редко, то цель сделать его эффективно — сомнительна. т.е. можно не как эффективнее, а как проще
а если этот запрос надо делать постоянно, то решается редизайном (в одной таблице — департаменты с избыточными полями, в частности возрастом самого старшего сотрудника, в другой — собственно сотрудники)
Здравствуйте, strcpy, Вы писали:
S>Как и обещал, объясняю что мне нужно. Всё упростил до нЕльзя:
S>Есть таблица с полями: Department, Name, Age. Как получить список самых старых сотрудников по отделению с возрастами. То есть вычеркнуть из таблицы всех тех, для кого в данном подразделении есть более старый человек. Как такое сделать на HQL причём эффективно, так как таблица очень большая?
А что-то подобное не пройдет?
select Department, Name, Age
from table
group by Department, Name
order by age desc