複数の列で結合された 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.A
、T1.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
ただし、大量のデータがあるため、非常に遅いです (数時間)。これにはより高速なアルゴリズムがありますか?
ありがとう。