Использование CTE (SQL Server 2005 +):
WITH max_feature AS (
SELECT c.id,
c.parent,
MAX(c.feature) 'feature'
FROM CHILD c
GROUP BY c.id, c.parent)
SELECT p.id,
p.text,
mf.id,
mf.parent,
mf.feature
FROM PARENT p
LEFT JOIN max_feature mf ON mf.parent = p.id
Не эквивалент CTE:
SELECT p.id,
p.text,
mf.id,
mf.parent,
mf.feature
FROM PARENT p
LEFT JOIN (SELECT c.id,
c.parent,
MAX(c.feature) 'feature'
FROM CHILD c
GROUP BY c.id, c.parent) mf ON mf.parent = p.id
В вашем вопросе отсутствуют детали для работы с прерывателями связи (когда значения 2+ CHILD.id
имеют одинаковое значение свойства). В ответе Agent_9191 используется TOP 1
, но при этом возвращается первое возвращаемое, а не обязательно то, что вам нужно.