同様の質問がたくさんありますが、それらは私が望むものを完全にはカバーしていないようです。
私は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) を 1 回だけリストする必要があり、ABS(t1.POSITION - t2.POSITION) が最小である必要があります。
GROUP BY を使用して、これを 1 つの方法で行う方法を見つけました。
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 行が返されます。