我有以下表格: 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;
此查询的结果具有以下结构:
![](https://i.stack.imgur.com/gzIa2.png)
问题是 `GROUP BY` 没有正确地将寄存器x1和x2分组,因此当列x2的值正确时,x1的结果为null。如果我删除 `GROUP BY` 语句,所有预期的寄存器都被获得,但由于它们没有分组,如下所示:
![](https://i.stack.imgur.com/Tpqx2.png)
因此,我的问题是:如何在不丢失其中一列的所有寄存器的情况下执行此查询?
1条答案
按热度按时间agyaoht71#
你必须加入
table1
最多2份table2
:请看演示。
结果: