-2

複数の列で結合された 2 つのテーブルから最も効率的な方法で結果を取得する SQL:

T1:

+---+-----+---+----+
| A | B   | C | D  |
+---+-----+---+----+
| 1 | 111 | W | 11 |
+---+-----+---+----+
| 2 | 222 | X | 22 |
+---+-----+---+----+
| 3 | 333 | Y | 33 |
+---+-----+---+----+
| 4 | 444 | Z | 44 |
+---+-----+---+----+

T2:

+---+-----+---+----+
| A | B   | C | D  |
+---+-----+---+----+
| 1 | 112 | W | 11 |
+---+-----+---+----+
| 2 | 222 | X | 99 |
+---+-----+---+----+
| 3 | 333 | Y | 88 |
+---+-----+---+----+
| 4 | 444 | W | 44 |
+---+-----+---+----+

T1.A = T2.AT1.B = T2.B、の3 つの列を一致させT1.C = T2.C、 と の最高のピタゴラスの定理結果を取得しT1.Dます。T2.D

したがって、T1 と T2 では、次の行のみが一致します。

 T1                    T2                
+---+-----+---+----+  +---+-----+---+----+
| A | B   | C | D  |  | A | B   | C | D  |
+---+-----+---+----+  +---+-----+---+----+
| 2 | 222 | X | 22 |  | 2 | 222 | X | 99 |
+---+-----+---+----+  +---+-----+---+----+
| 3 | 333 | Y | 33 |  | 3 | 333 | Y | 88 |
+---+-----+---+----+  +---+-----+---+----+

しかし 、そして

したがって、結果として返される唯一の行は次のとおりです。

+---+-----+---+------+------+--------+
| A | B   | C | T1.D | T2.D | E      |
+---+-----+---+------+------+--------+
| 2 | 222 | X | 22   | 99   | 101.41 |
+---+-----+---+------+------+--------+

私はこのようなものを持っています:

select top 1 t1.A, t1.B, t1.C, t1.D, t2.D, sqrt(square(case t1.D when null then 0 else t1.D end) + square(case t2.D when null then 0 else t2.D end)) as E
from t1
left join t2 on t1.A=t2.A and t1.B=t2.B and t1.C=t2.C
order by E desc

ただし、大量のデータがあるため、非常に遅いです (数時間)。これにはより高速なアルゴリズムがありますか?

ありがとう。

4

1 に答える 1