通过不重叠匹配,我的意思是每行最多应返回一次。这似乎很难。
我设法获得最佳不重叠的匹配,使用以下查询,其中pair是一个视图,其中所有可能的匹配为(id1,id2,val1,val2)行。
SELECT p.* FROM pair p
LEFT JOIN pair p1 ON p1.id1 = p.id1 AND p1.val2 < p.val2
LEFT JOIN pair p2 ON p2.id2 = p.id2 AND p2.val1 < p.val1
WHERE
p1.id1 IS NULL
AND p2.id2 IS NULL;
这里有完整的方形http://sqlfiddle.com/#!9/68614/2
对于t1中的值a,b和t2中的a,d,我希望它返回对(a,a)和(b,d),但它只返回(a,a)
有人可以提供有效的解决方案吗?或者如果这种匹配在客户端上从根本上做得更好,你能解释一下原因吗?
- 编辑
我试图解决的问题类似于此处讨论的问题:Retrieving the last record in each group
我的要求更高,我还需要匹配不重叠。
答案 0 :(得分:0)
你在寻找类似的东西吗?
SELECT p.* FROM pair p
LEFT JOIN pair p1 ON p1.id1 = p.id1 AND p1.val2 < p.val2
LEFT JOIN pair p2 ON p2.id2 = p.id2 AND p2.val1 < p.val1
WHERE
p.id1 = p.id2
ORDER BY id1