1
有很多類似的問題,這似乎並不能涵蓋我想要的。每個表只加入一行,反之亦然
我有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行。
當你交換t1和t2時,你看到了什麼結果? – PinnyM