加入两个表并返回最佳“不重叠”匹配

时间:2015-07-10 10:57:57

标签: mysql sql join

通过不重叠匹配,我的意思是每行最多应返回一次。这似乎很难。

我设法获得最佳不重叠的匹配,使用以下查询,其中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

我的要求更高,我还需要匹配不重叠。

1 个答案:

答案 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

SQL FIDDLE