我有一个包含3列的SQL表:“从点”,“到点”和“点之间的距离”。特定的一对点始终只有一个距离。
| from | to | distance |
|-----------------------|
| 1 | 2 | 15 |
| 1 | 3 | 20 |
| 1 | 4 | 2 |
| 3 | 2 | 16 |
| 4 | 2 | 48 |
| 5 | 2 | 12 |
| 3 | 4 | 19 |
| 3 | 5 | 55 |
| 4 | 5 | 18 |
现在,我有了一个点列表,例如,我想获取这些点之间的距离:
ids = [1, 2, 4]
我想返回这些点之间的所有距离:
1-2 -> 15
1-4 -> 2
2-4 -> 48
我已经在python中编写了一些代码来获取这些配对
pairs=[]
for a in ids:
for b in ids:
if a != b and sorted([a,b]) not in trasy:
pairs.append(sorted([a,b]))
print(sorted([a,b]))
我可以向SQL请求以获取距离,但是这样每对都会有一个新的查询,并且ID列表可以更长(例如目前最多50个元素),我认为这不是一个好方法。
我在SQL方面还很新,但是我相信有一些更简单的方法,用一个查询就能很好地解决所有问题
您可以像这样在单个查询中获取对:
with points(point_from, point_to, distance) as (
values
(1, 2, 15),
(1, 3, 20),
(1, 4, 2),
(3, 2, 16),
(4, 2, 48),
(5, 2, 12),
(3, 4, 19),
(3, 5, 55),
(4, 1, 68),
(4, 5, 18)
)
select least(point_from, point_to) as "from", greatest(point_from, point_to) as "to", distance
from points
where point_from in (1, 2, 4) and point_to in (1, 2, 4)
from | to | distance
------+----+----------
1 | 2 | 15
1 | 4 | 2
2 | 4 | 48
1 | 4 | 68
(4 rows)
特定的一对点始终只有一个距离。
嗯,我不这么认为。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句