具有以下查询:
label {
display: block;
position:relative;
text-align: right;
width: 100px;
margin: 0 0 5px 0;
}
label > input,
label > select,
input {
position: absolute;
left: 120px;
}
此查询需要1秒才能运行,但是当Prop2为空时它会给我错误的SUM
我将查询更改为使用IsNULL
select
tA.Name
,tA.Prop1
,tA.Prop2
( select sum(tB.Values)
from tableB tB
where tA.Prop1 = tB.Prop1
and tA.Prop2 = tB.Prop2
) as Total
from tableA tA
现在数据正确,但需要大约7秒钟.....
有最快的方法吗?
注意:这只是更复杂查询的部分简化版本....但基本想法就在这里。
答案 0 :(得分:1)
根据您的描述,=
正在使用索引,但isnull()
会阻止使用索引。这在SQL服务器中有点难以解决。
一种方法是将逻辑分成两个总和:
select tA.Name, tA.Prop1, tA.Prop2
(isnull((select sum(tB.Values)
from tableB tB
where tA.Prop1 = tB.Prop1 and tA.Prop2 = tB.Prop2
), 0) +
isnull((select sum(tB.Values)
from tableB tB
where tA.Prop1 = tB.Prop1 and
tA.Prop2 is null and tB.Prop2 is null
), 0)
) as Total
from tableA tA;
答案 1 :(得分:1)
我最终使用
AND (
(tA.Prop2= tB.Prop2)
OR (tA.Prop2 IS NULL AND tB.Prop2 IS NULL )
)