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 クエリを教えてくれたら幸いです。一致する座標が 2 つしかなく、すべての座標が一致するわけではありません。

テーブルの表現がうまくいかない場合は申し訳ありませんが、必要に応じて 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 に答える