Mysql连接三个表,而不是按两列分组
我有三张桌子t1,t2,t3。T3与t2有关,t2与t1有关。 我有这个选择Mysql连接三个表,而不是按两列分组,mysql,join,group-by,Mysql,Join,Group By,我有三张桌子t1,t2,t3。T3与t2有关,t2与t1有关。 我有这个选择 select t1.id,sum(t3.column) from t1 join t2 on t2.fk = t1.id join t3 on t3.fk = t2.id where t1.column = 'something' group by t1.id,t3.fk; 选择“无分组依据”时有120行。与 group by t3.fk 它有5行。 与 这还可以。但如果我有 gro
select t1.id,sum(t3.column)
from
t1
join t2 on t2.fk = t1.id
join t3 on t3.fk = t2.id
where t1.column = 'something'
group by t1.id,t3.fk;
选择“无分组依据”时有120行。与
group by t3.fk
它有5行。
与
这还可以。但如果我有
group by t3.fk,t1.id
它有5行。我以为只有一排。
示例数据:
t1.id |t1.some_column
5 |"some data"
t2.id |t2.fk |t2.some_column
1 |5 |"a"
2 |5 |"b"
3 |5 |"c"
4 |5 |"d"
5 |5 |"e"
t3.id |t3.fk |t3.column
1 |1 |1
......................
24 |2 |1
......................
48 |3 |1
......................
72 |3 |1
......................
96 |3 |1
......................
选择返回:
t1.id |sum(t3.column)
5 |24
5 |24
5 |24
5 |24
5 |24
我不明白当我按t1.id分组时,为什么有5行具有相同的t1.id。我知道,如果它只返回一行,我将丢失有关sum的信息,但它也会在select中不返回sum。我知道这个选择很愚蠢,毫无意义,但它可能会帮助我更好地理解。我相信你没有向我们提供足够的信息,因为结果毫无意义
返回5行表示有五个不同的group by t2.fk
值t2.fk
返回1行表示只有一个不同的group by t1.id
值t1.id
- 由于您加入了on
,这意味着t2.fk=t1.id
的不同值的数量和t2.fk
的不同值的数量应该是相同的,这与您之前的结果相矛盾t1.id
对不起,你说得对。它应该是t3.fk而不是t2.fk。我编辑它 并添加一些数据科库米斯
没有什么难懂的。假设有5个
t3.fk
的唯一值,比如[1,2,3,4,5],还有1个t1.id
的唯一值,比如[1],组合t3.fk,t1.id
应该产生5个唯一的组合,比如[(1,1),(2,1),(3,1),(4,1),(5,1)]。因此,返回5行是意料之中的事。很抱歉,您是对的。它应该是t3.fk而不是t2.fk。我编辑它并添加一些数据。没有什么难懂的。假设有5个t3.fk
的唯一值,比如[1,2,3,4,5],还有1个t1.id
的唯一值,比如[1],组合t3.fk,t1.id
应该产生5个唯一的组合,比如[(1,1),(2,1),(3,1),(4,1),(5,1)]。因此,返回5行是意料之中的事。考虑提供一个SqLoFIDLE连同一个相应的和期望的结果。就本例而言,我相信20行就足够了。
t1.id |sum(t3.column)
5 |24
5 |24
5 |24
5 |24
5 |24