Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как избавиться то статичности подзапроса?  [new]
Михаил
Member

Откуда:
Сообщений: 1470
Добрый день!

Я хочу сопоставить каждой строке одной таблицы значение поля из другой таблицы из случайно, выбранной записи.

select FieldFromA, (select top 1 FieldFromB from B order by newid()) from A

Но получается, для каждой строки из А, строки из В отсортированы одинаково!
Подзапрос в скобках статичен! Как его заставить считать newid для всех строк из А.
Похоже я не понимаю чего-то очень фундаментального в обработке запросов, но ведь в след. запросе выражение в скобках не статично!

select FieldFromA, (select newid()) from А

newid вычисляется для каждой строки из А!

Заранее спасибо за соображения!
18 мар 04, 23:41    [586397]     Ответить | Цитировать Сообщить модератору
 Re: Как избавиться то статичности подзапроса?  [new]
iSestrin
Member

Откуда: Новосибирск
Сообщений: 3811
>Похоже я не понимаю чего-то очень фундаментального в обработке запросов, но ведь в след. запросе выражение в скобках не статично!<

сервер понимает, что колонка подзапроса ни как не коррелирует с колонками запроса, потому считает его один раз

попробуй так

select FieldFromA, (select top 1 FieldFromB from B where FieldFromB=A.FieldFromA or FieldFromB<>A.FieldFromA order by newid()) from A
19 мар 04, 07:59    [586522]     Ответить | Цитировать Сообщить модератору
 Re: Как избавиться то статичности подзапроса?  [new]
Михаил
Member

Откуда:
Сообщений: 1470
На самом деле к меня запрос сложней, чем я написал, там подзапрос связан, но результат тот же!
19 мар 04, 10:43    [586865]     Ответить | Цитировать Сообщить модератору
 Re: Как избавиться то статичности подзапроса?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ну все равно нужно сделать так, чтобы в подзапросе было что-то меняющеся для каждой записи из основного запроса.
Иначе просто оптимизатор будет считать что результат подзапроса есть константа и будет вычислять его только один раз
19 мар 04, 10:48    [586888]     Ответить | Цитировать Сообщить модератору
 Re: Как избавиться то статичности подзапроса?  [new]
rst
Member

Откуда: Йобурк
Сообщений: 1005
select id,

(select top 1 id from sysobjects b order by newid(),a.id^b.id)
from sysobjects a
19 мар 04, 10:55    [586907]     Ответить | Цитировать Сообщить модератору
 Re: Как избавиться то статичности подзапроса?  [new]
Михаил
Member

Откуда:
Сообщений: 1470
Спасибо!

Сделал на данной основе, хотя не до конца понял алгоритм оптимизатора...
В некоторых вариантах не срабатывает.
Я надеялся, что есть соотв. хинт для запроса, но, похоже, нет.
19 мар 04, 18:49    [588387]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить