ВЫБРАТЬ несколько раз один и тот же столбец возвращает дублированный - PullRequest
1 голос
/ 06 августа 2020

У меня есть следующие таблицы:

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;

Результат этого запроса имеет следующую структуру:

enter image description here

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:

введите описание изображения здесь

Поэтому у меня вопрос: как мне выполнить этот запрос, не потеряв все регистры одного из столбцов?

1 Ответ

2 голосов
/ 06 августа 2020

Вы должны присоединить table1 к 2 копиям table2:

select t1.id, 
       t21.level x1,
       t22.level x2
from table1 t1 
inner join table2 t21 on t21.id = t1.idFirst
inner join table2 t22 on t22.id = t1.idLast
where t1.value = 0;

См. демонстрацию . Результатов:

| id  | x1  | x2  |
| --- | --- | --- |
| 1   | 123 | 124 |
| 2   | 126 | 127 |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...