mysql - 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 相等。我无法弄清楚解决方案。任何人都有这样的查询经验吗?
解决方案
我想你想要这样的东西:
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()
.
推荐阅读
- ruby-on-rails - 有没有办法使用 transform_keys 方法只转换 Rails 中的一些键?
- ethereum - geth 事件 newPendingTransactions 不发生
- node.js - 在回调 AWS lambda 中得到 null
- c# - 无法从 POST 请求反序列化 HttpContent
- dialogflow-es - 使用 NodeJS 客户端来自 Webhook 的响应
- python-3.x - import pandas as pd ImportError: No module named pandas
- javascript - (同构)路由和基于ajax的react组件的后端渲染
- swift - 如何准备 API 响应以在 swift 中与 jsonDecoder 一起使用
- javascript - Particles Js 的画布显示在页面的最底部
- haskell - 使用递归确定子集