有很多类似的问题,似乎并没有完全涵盖我想要的内容。
我有 2 张桌子:
THREEGRAM POSITION
^^B 1
^BA 2
BAK 3
AKA 4
KAC 5
ACE 6
CEV 7
EVA 8
VA$ 9
A$$ 10
和
THREEGRAM POSITION
^^S 1
^SO 2
SOR 3
ORK 4
RKO 5
KOC 6
OCE 7
CEV 8
EVI 9
VIC 10
ICE 11
CEV 12
EVA 13
VA$ 14
A$$ 15
我可以加入这些表以获得以下结果:
select * from t1
join t2 on t1.threegram = t2.threegram
THREEGRAM POSITION THREEGRAM POSITION
CEV 7 CEV 8
CEV 7 CEV 12
EVA 8 EVA 13
VA$ 9 VA$ 14
A$$ 10 A$$ 15
这不是我要找的结果;我只想列出一次 POSITION (t1 和 t2),它应该是 ABS(t1.POSITION - t2.POSITION) 最小的位置。
我想出了如何通过使用 GROUP BY 来做到这一点:
select t1.threegram, t1.POSITION, min(abs(t1.position-t2.position)) as MinPosition
from t1
join t2 on t1.threegram = t2.threegram
group by t1.threegram, t1.POSITION
order by t1.POSITION
THREEGRAM POSITION MinPosition
CEV 7 1
EVA 8 5
VA$ 9 5
A$$ 10 5
问题是我想要一个双向工作的解决方案,即当我在上述查询中切换 t1 和 t2 时,结果应该相似并返回 4 行。