合并相应的MySQL记录

时间:2012-09-23 12:08:06

标签: mysql merge duplicates

我有一个名为“objecttable”的MySQL表,其中包含以下结构和数据。 (数据只是一个序列,还有很多)。

ID    |  Name              |  posX  |  posY   | posZ |rotX | rotY | rotZ | rotW  |  
3562  |   LODpmedhos1_LAe  |  2062  |  -1703  |  16  |  0  |  45  |  22  |  1    |  
3559  |   LODpmedhos5_LAe  |  2021  |  -1717  |  15  |  0  |  45  |  34  |  1    |  
3561  |   LODpmedhos3_LAe  |  2021  |  -1717  |  15  |  0  |  45  |  34  |  1    |  

我想弄清楚哪些记录具有相同的posX,posY,posZ,rotX,rotY和rotZ值,并将它们插入一个名为“matchtable”的表中,最后我希望它看起来像这样(我有表格结构准备好了)

ID1     |       Name            |   ID2     |   Name          |  
3559    |   LODpmedhos5_LAe     |   3561    |  LODpmedhos3_LAe|  

如果有人能为我提供正确的SQL查询,我会很感激。我没有超过两个匹配坐标,并且并非所有坐标都匹配。

很抱歉,如果表格表示很糟糕,我会尝试在必要时制作HTML表格。

谢谢!

2 个答案:

答案 0 :(得分:2)

此查询可以解决问题,但结果数量可能比需要的数量多得多。例如,如果 5行满足您的查询,则结果将为 20(= n *(n-1))

SELECT ot.ID AS ID1, ot.Name AS Name1, ot2.ID AS ID2, ot2.Name AS Name
FROM objecttable ot
JOIN objecttable ot2
    ON ot.ID > ot2.ID
        AND ot.posX = ot2.posX
        AND ot.posY = ot2.posY
        AND ot.posZ = ot2.posZ
        AND ot.rotX = ot2.rotX
        AND ot.rotY = ot2.rotY
        AND ot.rotZ = ot2.rotZ

修改

回复lserni的评论:

ON ot.ID <> ot2.ID

上述条件是删除结果,如:

ID1     |       Name            |   ID2     |   Name          |
3559    |   LODpmedhos5_LAe     |   3559    |  LODpmedhos5_LAe|

答案 1 :(得分:0)

试试这个:

-- insert into matchtable -- uncomment to insert the data
select alias1.Id,
    alias1.Name, 
    alias2.Id
    alias2.Name
from objecttable as alias1
    join objecttable as alias2
        on alias1.posx = alias2.posx
            and alias1.posy = alias2.posy
            and alias1.posz = alias2.posz
            and alias1.roty = alias2.roty
            and alias1.roty = alias2.roty
            and alias1.rotz = alias2.rotz
            and alias1.Id > alias2.Id