我正在运行一个 SQL 查询,它自连接同一个表 24 次,以便根据 24 个不同的条件“查找”表的特定行,以便我可以在计算中使用所有这些值。虽然性能非常好(表已编入索引且连接条件受到限制),但我不禁觉得这里有一股代码味道。
有没有更好的方法在 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个变量的函数,预先计算的返回值存储在表中,用于各种参数。