2 つの項目の間の値を与えるテーブルがあります。表には次の列があります。
itemA | itemB | value
1 | 2 | 125
1 | 3 | 56
3 | 2 | 78
2 | 4 | 24
4 | 1 | 994
3 | 4 | 7
対称値が繰り返されていないことを強調します。たとえば、このデータはすでに itemA = 1 および itemB = 2 で保存されているため、itemA = 2 および itemB = 1 の行があり、値 = 125 です。
ここで、項目 1、2、および 3 の間のすべての値を取得したいと思いますが、対称値も取得します。SQL結果セットのようなもの:
itemA | itemB | value
1 | 2 | 125
1 | 3 | 56
2 | 1 | 125
2 | 3 | 78
3 | 1 | 56
3 | 2 | 78
次のSQLクエリでそれを取得することに成功しました:
select itemA as iA, itemB as iB, value
from table
where itemA in (1,2,3)
and itemB in (1,2,3)
union all
select itemB as iA, itemA as iB, value
from table
where itemA in (1,2,3)
and itemB in (1,2,3)
order by iA, iB;
ただし、UNION 演算子はパフォーマンス キラーであり、このテーブルには実際には 1 億行を超える行があると言われています。しかし、何時間ものブレインストーミングの後、私はそれを得る別の方法を見つけられません. この結果セットを取得するための、より優れたパフォーマンスの高い SQL クエリを見つけてください。
前もって感謝します