sql - 如何根据连接属性的最接近值左连接两个表?

标签 sql sqlite left-join

假设我有两个表,t1t2,它们如下所示:

t1:

id, value
1, 1
2, 1
3, 2
4, 12
5, 13

t2:

id, value
1, 1
2, 2
3, 10

我试图根据 t1.valuet2.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/

相关文章:

php - 不区分大小写的 utf8 选择

sql - 如何使用 Ruby 和 SQLite3 从数据库中选择一个值?

android - 为什么在 Android 中使用 sqlite 数据库?

sql - 将SQL语句转换为Linq语句(3表左连接+where)

sql - 此更新查询在有连接时如何设置总和

mysql - 如何进行选择为嵌套的查询?

sql - 如何强制排名函数为相同排名的行分配不同的值?

mysql - SQL查询: NULL values that should not be NULL when using aggregate function with left join

mysql - 左外连接子查询

mysql - 如何将 PostgreSQL 数据库中的所有 SMALLINT 列转换为 BOOLEAN?