SQL-запросы с представлениями и подзапросами - PullRequest
0 голосов
/ 06 октября 2010
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.Затем этот набор данных проходит через другое представление, чтобы получить некоторые средние значения и stdevs верхнего уровня.

Средние значения могут включать более 1 sid (sid идентифицирует набор данных).

Этотрудно описать его более подробно, не раскрывая кодовую базу и структуру кода, которая не должна раскрываться;)

Кто-нибудь может подсказать, почему запрос зависает при попытке использовать подзапрос?(Код заново создан с использованием вложенных курсоров, поскольку мне сказали, что курсоры - это работа дьявола, а вложенные курсоры могут сделать меня стерильным)

1 Ответ

0 голосов
/ 06 октября 2010

Попробуй это. Возврат существует, как только он найдет подходящее условие, для выбора отличного потребуется пройти через набор данных и при необходимости отсортировать его, чтобы удалить дубликаты.

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 и примерные данные определенно помогут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...