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