我正在尝试加入两个这样的表:
表 A
A1, A2, A3
A, 1, 35
A, 1, 70
A, 1, 105
表 B
B1,B2, B3
B, 1, 30
C, 1, 32
D, 1, 40
E, 1, 55
F, 1, 60
G, 1, 77
H, 1, 80
预期的结果是这样的:
A, 1, 35, C, 32
A, 1, 70, F, 60
A, 1, 105, H, 80
也就是说,对于表 A 中的每一行,我只想从表 B 中选择一行,这应该是 B3 值较小但最接近 A3 值的行。
到目前为止,我已经尝试了以下查询:
SELECT A1, A2, A3, B1, B3 FROM A JOIN (SELECT B1, B2, B3 FROM B ORDER BY B2, B3 DESC) AS A ON A.A2 = B.B2 AND A.B3 < A.A3
但是,这会产生如下表格:
A, 1, 35, B, 30
A, 1, 35, C, 32
A, 1, 70, B, 30
A, 1, 70, C, 32
A, 1, 70, D, 40
A, 1, 70, E, 55
等等。我还尝试将 LIMIT 1 添加到内部 SELECT,但这不会产生任何结果。如果我自己运行内部查询(使用 LIMIT 1),我会得到预期的结果。如何更改查询以产生所需的结果?我目前正在使用 sqlite,但想以一种可移植到其他 DBMS 的方式编写它。