【发布时间】:2020-12-11 22:21:38
【问题描述】:
我有表 t1,我想在下面的 a、b 和 c 列上加入表 t2
+---------+---------+---------+
|a |b |c |
+---------+---------+---------+
|473200 |1 |1.-1-1 |
|472400 |10 |1.-1-1 |
|472800 |10 |1.-1-1 |
|473200 |93 |1.-1-1 |
|472800 |26240 |1.-1-1 |
+---------+---------+---------+
t2
+---------+---------+---------+
|a |b |c |
+---------+---------+---------+
|473200 |1 |1.-1-1 |
|472400 |10 |1.-1-1 |
|472800 |10 |1.-1-1 |
|473200 |93 |1.-1-1 |
|472800 |26250 |1.-1-1 |
+---------+---------+---------+
当我只加入 a 和 c 时,结果是
+---------+---------+---------+---------+
|t1.b |t2.b |a |c |
+---------+---------+---------+---------+
|93 |1 |473200 |1.-1-1 |
|1 |1 |473200 |1.-1-1 |
|10 |10 |472400 |1.-1-1 |
|10 |10 |472800 |1.-1-1 |
|26240 |10 |472800 |1.-1-1 |
|93 |93 |473200 |1.-1-1 |
|1 |93 |473200 |1.-1-1 |
|10 |26250 |472800 |1.-1-1 |
|26240 |26250 |472800 |1.-1-1 |
+---------+---------+---------+---------+
我试图实现的是将 b 列添加到“on”子句中,以便在 b 列的最小差异上进行连接。
想要的结果
+---------+---------+---------+---------+
|t1.b |t2.b |a |c |
+---------+---------+---------+---------+
|1 |1 |473200 |1.-1-1 |
|10 |10 |472400 |1.-1-1 |
|10 |10 |472800 |1.-1-1 |
|93 |93 |473200 |1.-1-1 |
|26240 |26250 |472800 |1.-1-1 |
+---------+---------+---------+---------+
我在这里看到了类似的东西
https://dba.stackexchange.com/questions/73804/how-to-retrieve-closest-value-based-on-look-up-table
但不知道如何申请我的案子。
【问题讨论】:
-
在您的示例中,每个表中有两行 472800。如果有一个不相等的数字会发生什么?
-
标签: sql postgresql join sql-order-by greatest-n-per-group