2

我有一个名为“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 表格。

谢谢!

4

2 回答 2

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|
于 2012-09-23T12:20:11.913 回答
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
于 2012-09-23T12:20:25.530 回答