带有视图和子查询的SQL查询

时间:2010-10-06 07:45:07

标签: sql tsql

select nid, avg, std from sView1
  where sid = 4891
    and nid in (select distinct nid from tblref where rid = 799)
    and oidin (select distinct oid from tblref where rid = 799)
    and anscount > 3

这是我正在尝试运行的查询。像这样运行大约需要3-4秒。但是,如果我使用子查询替换“4891”值(select distinct sid from tblref where rid = 799),则该过程只会挂起,即使子查询只返回一个sid

该查询应返回结果集上具有平均值(avg)和标准差(std)的数据集,该结果集是通过sView1中的嵌套视图计算的。然后,此数据集将通过另一个视图运行,以获得一些顶级平均值和stdev。

平均值可能需要包含多于1个sid(sid标识数据集)。

如果不透露不应泄露的代码库和代码结构,很难描述它;)

有人建议在尝试使用子查询时查询挂起的原因吗? (代码是从最初使用嵌套游标重建的,因为我被告知游标是魔鬼的工作,而嵌套游标可能会让我无菌)

1 个答案:

答案 0 :(得分:0)

试试这个。一旦找到匹配条件就存在返回,select distinct将需要遍历数据集并选择对其进行排序以删除重复项。

SELECT nid,avg,std from sView1 AS SV
WHERE EXISTS (SELECT * FROM TblRef AS TR WHERE sv.sid = Tr.sid AND Sv.nid = tr.nid AND sv.oid = tr.oid AND tr.rid = 799)
AND ansCount>3

此外,如果不访问查询计划和表结构,则很难提供有意义的答案。所以DDL和样本数据肯定会有所帮助。

相关问题