左外连接到两个表

时间:2014-03-26 20:41:22

标签: mysql sql

我有一张表1与表2有一对多的关系。 表1还与表3具有一对多的关系

我想结合连接的结果,但所有即时获取都是重复值

这是结构:

table 1
reportnumber
1
2
3

table 2
reportnumber  col1
1              a
1              b
2              c
3              a

table 3
reportnumber  col2
1              x
1              y
1              z
2              w

预期结果集

reportnumber   col1   col2
1                a      x
1                b      y
1                       z
2                c      w
3                a

我确定左外连接可以实现这一点,但我无法正确使用语法

任何线索?

这就是我正在尝试的

select * from table1 a 
left outer join table2 b on a.reportnumber=b.reportnumber
left outer join table3 on a.reportnumer=c.reportnumber 

但结果看起来像这样

reportnumber   col1   col2
1               a       x
1               a       y
1               a       z
1               b       x
1               b       y
1               b       z
...

1 个答案:

答案 0 :(得分:0)

这在MySQL中并不容易,但您可以使用变量来完成。这与join几乎没有关系。或者,它与join有很多关系,但您没有正确的join密钥,而且您没有full outer join

解决方案是使用数据列枚举每个表中的行。然后使用枚举和reportnumber

进行汇总
select reportnumber, max(col1) as col1, max(col2) as col2
from ((select t2.reportnumber, col1, null as col2, @rn2 := @rn2 + 1 as rn
       from table2 t2 cross join
            (select @rn2 := 0) const
      ) union all
      (select t3.reportnumber, null, t3.col2, @rn3 := @rn3 + 1 as rn
       from table3 t3 cross join
             (select @rn3 := 0) const
      )
     ) t
group by reportnumber, rn;