首页 > 解决方案 > SQL查询连接两个没有重复值的表?

问题描述

Table 1                          
ID | NAME | WARD_ID|         
1     A      1         
2     B      1         
3     C      2           
4     D      2 

Table 2           
ID | MONTH1 | MONTH2 | WARD_ID|         
1     9          10        1         
2     6          11        1         
3     5          12        2           
4     13         14        2 

我想加入这两个表并产生以下输出:

ID | NAME | MONTH1 | MONTH2 | WARD_ID|         
1      A       9       10        1         
2      B       6       11        1         
3      C       5       12        2           
4      D       13      14        2 

在查询的 ON 条件下,我必须保持两个表的 WARD_ID 相等。我无法弄清楚解决方案。任何人都有这样的查询经验吗?

标签: mysqlsqldistinct

解决方案


我想你想要这样的东西:

select t1.*, t2.*
from (select t1.*,
             (@rn1 := if(@w1 = ward_id, @rn1 + 1,
                         if@w1 := ward_id, 1, 1)
                        )
             ) as rn
      from (select t1.* from table1 t1 order by ward_id, id ) t1 cross join
           (select @w1 := -1, @rn1 := -1) params
     ) t1 join
     (select t2.*,
             (@rn2 := if(@w2 = ward_id, @rn2 + 1,
                         if@w2 := ward_id, 1, 1)
                        )
             ) as rn
      from (select t2.* from table2 t2 order by ward_id, id ) t2 cross join
           (select @w2 := -1, @rn1 := -1) params
     ) t1
     on t2.ward_id = t1.ward_id and t2.rn = t1.rn;

子查询枚举每个表中的行。然后join使用枚举。

这在 MySQL 8.0 中要简单得多,使用row_number().


推荐阅读