我有两个表:
带有列的表A
name | tag | price | ref
和带有列的表B:
id | time | min_ref | max_ref
我要进行以下查询,从表A中获取all
列,从表B中获取id
和time
列,以这样的方式组合行:如果A中的值ref
在(min_ref, max_ref)
范围内,则与B中的一行合并。示例:
A
name | tag | price | ref
A | aaa | 78 | 456
B | bbb | 19 | 123
C | ccc | 5 | 789
B
id | time | min_ref | max_ref
0 | 26-01-2019 | 100 | 150
1 | 27-01-2019 | 450 | 525
2 | 25-01-2019 | 785 | 800
查询应返回:
name | tag | price | ref | id | time
A | aaa | 78 | 456 | 1 | 27-01-2019
B | bbb | 19 | 123 | 0 | 26-01-2019
C | ccc | 5 | 789 | 2 | 25-01-2019
答案 0 :(得分:3)
符号(min_ref, max_ref)
for ranges signifies exclusive bounds。对于包含的[min_ref, max_ref]
。
所以:
select a.*, b.id, b.time
from a
join b on a.ref > b.min_ref
and a.ref < b.max_ref;
BETWEEN
predicate将所有界限视为包含。
答案 1 :(得分:1)
我认为这只是一个join
:
select a.*, b.id, b.time
from a join
b
on a.ref between b.min_ref and b.max_ref;
答案 2 :(得分:1)
您想要一个JOIN
,它将两个表中的行与适当的条件组合在一起。例如:
SELECT a.name, a.tag, a.price, a.ref, b.id, bi.time
FROM a
INNER JOIN b ON b.min_ref <= a.ref AND b.max_ref >= a.ref
INNER JOIN
从两个表ON
中以指定条件查找匹配的行。在这种情况下,标准是a.ref
在b.min_ref
和b.max_ref
之间。
您还可以使用sql BETWEEN
operator简化条件:
SELECT ...
FROM a
INNER JOIN b ON a.ref BETWEEN b.min_ref AND b.max_ref