[英]Join only one row in each table and vice versa
有很多類似的問題,似乎並不能滿足我的要求。
我有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行。
你不能,真的。 第一個表是唯一的,因為它沒有任何冗余,而第二個表具有相同“ threegram”的多個條目。 我想到的第一個想法是對2個表的UNION執行自聯接,這將有效地完成您所需的工作。
如果這種方法可以很好地工作,那么知道為什么需要同時使用這兩種方法可能會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.