У меня есть следующие таблицы:
table1
:
id | idFirst | idLast | value
1 | 1 | 2 | 0
2 | 4 | 5 | 0
3 | 6 | 8 | 1
table1.idFirst
и table1.idLast
- это FK
, указывающие на table2.id
table2
:
id | level
1 | 123
2 | 124
3 | 125
4 | 126
5 | 127
6 | 128
7 | 129
8 | 130
Я хочу выполнить запрос, который возвращает table2.level
всех регистров в table1
, где table1.value==0
. Мой подход был следующим:
SELECT T1.id
(SELECT T2.level WHERE T1.idFirst=T2.id) AS x1,
(SELECT T2.level WHERE T1.idLast=T2.id) AS x2
FROM table1 T1
INNER JOIN table2 T2 ON T1.idFirst=T2.id OR T1.idLast=T2.id
WHERE table1.value=0
GROUP BY T1.id
ORDER BY T1.id ASC;
Результат этого запроса имеет следующую структуру:
The problem with this is that the GROUP BY
is not correctly grouping the registers x1 and x2, and therefore the result is null for x1 while the column x2 has correct values. If I delete the GROUP BY
statement, all the expected registers are obtained but as they are not groupped, as can be seen bellow:
введите описание изображения здесь
Поэтому у меня вопрос: как мне выполнить этот запрос, не потеряв все регистры одного из столбцов?