24 の異なる基準に従ってテーブルの特定の行を「ルックアップ」するために、同じテーブルを 24 回自己結合する SQL クエリを実行しているため、これらすべての値を計算に使用できます。パフォーマンスはまったく問題ありませんが (テーブルにはインデックスが付けられ、結合基準は制限されています)、ここにコードの匂いがあるように感じずにはいられません。
SQL でルックアップを行うより良い方法はありますか?
(例を含めないことをお詫びします。質問を一般的な方法で表現したことを願っています)。
編集:とにかく例を試す:
CREATE TABLE key (
pk1 int,
pk2 int,
pk3 int,
PRIMARY KEY (pk1, pk2, pk3)
);
CREATE TABLE values (
pk1 int,
pk2 int,
pk3 int,
pk4 int,
pk5 int,
value int,
PRIMARY KEY (pk1, pk2, pk3, pk4, pk5)
);
SELECT k.pk1, k.pk2, k.pk3,
v1.value + v2.value - v3.value * (v4.value / v5.value) + ... + v24.value as result
FROM key k
LEFT JOIN values v1
on v1.pk1=k.pk1
and v1.pk2=k.pk2
and v1.pk3=k.pk3
and v1.pk4=100
and v1.pk5=200
LEFT JOIN values v2
on v2.pk1=k.pk1
and v2.pk2=k.pk2
and v2.pk3=k.pk3
and v2.pk4=400
and v2.pk5=800
...
LEFT JOIN values v24
on v24.pk1=k.pk1
and v24.pk2=k.pk2
and v24.pk3=k.pk3
and v24.pk4=900
and v24.pk5=700;
編集 2: この構造の理由は、値テーブルが (数学的に言えば) 5 つの変数の関数を表し、事前に計算された戻り値がさまざまなパラメーターのテーブルに格納されているためです。