You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Access SQL:实现无交叉重复的自连接查询

搞定自连接的重复交叉结果问题

嘿,这个问题我之前处理过,其实只需要给你的自连接加个小条件就能解决!先理清楚咱们的场景:

咱们的数据源是这样的:

BagWeight
A2
B2
C3

你的需求是找出重量相同的袋子,但不想出现A|B和B|A这种重复的反向行,同时还要保留每个袋子和自身的匹配(比如A|A)对吧?

你现在用的查询:

SELECT lhs.bag, rhs.bag FROM myTable AS lhs INNER JOIN myTable AS rhs ON lhs.weight = rhs.weight;

之所以会出现反向重复,是因为只要重量相等就会匹配,完全没考虑袋子名称的顺序,所以A和B互相匹配就会生出两行。

改个小地方就行

只需要在连接条件里多加一句lhs.bag <= rhs.bag,就能过滤掉那些反向的重复行。修改后的SQL长这样:

SELECT lhs.bag, rhs.bag 
FROM myTable AS lhs 
INNER JOIN myTable AS rhs 
  ON lhs.weight = rhs.weight 
  AND lhs.bag <= rhs.bag;

看看结果对不对

执行这个查询后,就能得到你想要的结果:

lhs.bagrhs.bag
AA
AB
BB
CC

为啥这么管用?

核心逻辑很简单:对于重量相同的不同袋子(比如A和B),我们只保留左边袋子名称字典序小于等于右边的那一组,这样A|B会被留下,B|A就被过滤掉了。而袋子和自身的匹配(比如A|A)因为两边相等,自然会被保留,完美符合你的需求~

内容的提问来源于stack exchange,提问作者Ace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:41:41