假设我有两个表,t1
和 t2
,它们如下所示:
t1
:
id, value
1, 1
2, 1
3, 2
4, 12
5, 13
t2
:
id, value
1, 1
2, 2
3, 10
我试图根据 t1.value
和 t2.value
之间的最小差异左连接两个表,这样结果包含的所有记录t1
与来自 t2
的最匹配伙伴,所以
t1.id, t1.value,t2.id
1,1,1
2,1,1
3,2,2
4,12,3
5,13,3
我想查询看起来像这样:
SELECT t1.id, t1.value, t2.id
FROM t1 LEFT JOIN t2
ON t1.value = t2.value -- I don't know what to do here
以下是重现表格的 SQLite 查询:
CREATE TABLE "t1" ( "id" INTEGER, "value" INTEGER);
CREATE TABLE "t2" ( "id" INTEGER, "value" INTEGER);
INSERT INTO t1 VALUES (1, 1), (2, 1), (3, 2), (4, 12), (5, 13);
INSERT INTO t2 VALUES (1, 1), (2, 2), (3, 10);
最佳答案
你可以这样做:
SELECT t1.id, t1.value, t2.id
FROM t1 LEFT JOIN t2
ON abs(t1.value - t2.value) = (select min(abs(t1.value - value)) from t2)
您加入 t1.value - t2.value
的绝对最小值。
查看demo .
结果:
| id | value | id |
| --- | ----- | --- |
| 1 | 1 | 1 |
| 2 | 1 | 1 |
| 3 | 2 | 2 |
| 4 | 12 | 3 |
| 5 | 13 | 3 |
关于sql - 如何根据连接属性的最接近值左连接两个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56787774/