У меня есть три таблицы PATH
, ELEMENTS
и ELEMENT_DETAILS
со следующей структурой:
ПУТЬ:
ID
1
2
3
ЭЛЕМЕНТОВ:
ID | PATH_ID | DIRECTION | ELEMENT_DETAILS_ID
1 1 'left' 1
2 1 'right' 2
3 2 'left' 3
4 2 'right' 2
ELEMENT_DETAILS:
ID | NAME
1 'Henry'
2 'Mark'
3 'John'
Я бы хотел, чтобы результат был таким:
ID | left | right
1 'Henry' 'Mark'
2 'John' 'Mark'
Это SQL, который я придумал до сих пор:
SELECT path.id,
CASE WHEN elements.direction='left' THEN element_details.name
ELSE NULL END
as left,
CASE WHEN elements.direction='right' THEN element_details.name
ELSE NULL END
as right,
FROM elements
INNER JOIN path on elements.path_id = path.id
LEFT JOIN element_details on elements.element_details_id = element_details.id
GROUP BY path.id
ORDER BY path.id
Однако это не работает, так как postgres выдает ошибку «1021». И включение elements.direction
в group_by не дает мне агрегацию на уровне path.id
.
Застрял в этом. Может кто-нибудь, пожалуйста, помогите.
Я использую Postgres версии 9.5