Здравствуйте, baranovda, Вы писали:
B>задача решается, но такими подзапросами нужно выгрести около 30 полей, и код становится неопрятненьким.
Если я правильно все понял, то можно подзапросом "выгрести" не все 30 полей, а только один первичный ключ таблицы (вроде это Document_ID), а затем, для получения всех остальных полей (тоже из Documents?), сделать еще один left join полученной выборки (Person_ID, Document_ID) c этой же таблицей Documents по полю Document_ID.
Re[2]: [MSSQL2005] LEFT JOIN с 0..1 записью, без подзапроса
Здравствуйте, Овощ, Вы писали:
О>Здравствуйте, baranovda, Вы писали:
B>>задача решается, но такими подзапросами нужно выгрести около 30 полей, и код становится неопрятненьким.
О>Если я правильно все понял, то можно подзапросом "выгрести" не все 30 полей, а только один первичный ключ таблицы (вроде это Document_ID), а затем, для получения всех остальных полей (тоже из Documents?), сделать еще один left join полученной выборки (Person_ID, Document_ID) c этой же таблицей Documents по полю Document_ID.
Здравствуйте, baranovda, Вы писали:
B>Пример: человек имеет несколько документов. B>задача решается, но такими подзапросами нужно выгрести около 30 полей, и код становится неопрятненьким.
А так нельзя?
select distinct
d.Person_ID,
d.Document_ID
from Documents d
Re: [MSSQL2005] LEFT JOIN с 0..1 записью, без подзапроса
Здравствуйте, baranovda, Вы писали:
B>В результирующей выборке должны присутствовать все идентификаторы из Persons и хотя бы один (пусть даже первый попавшийся) из Documents.
Как-то так?
SELECT P.Persons_ID, MIN (Document_ID)
FROM Persons P
LEFT JOIN Documents D ON P.Persons_ID = D.Persons_ID
GROUP BY P.Persons_ID;
Re[2]: [MSSQL2005] LEFT JOIN с 0..1 записью, без подзапроса
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, baranovda, Вы писали:
B>>Так тоже можно, но у меня тут случай посложнее Партишны справляются лучше S>Партишны? OVER() что ли?
Да, он самый
Re: [MSSQL2005] LEFT JOIN с 0..1 записью, без подзапроса
___>select
___> *
___>from
___> Persons p
___> outer apply
___> (select top 1
___> *
___> from
___> Documents d
___> where
___> d.Person_ID = p.Person_ID
___> order by
___> ...
___> ) as dd
___>
"Канфэтка"!
Re[3]: [MSSQL2005] LEFT JOIN с 0..1 записью, без подзапроса
Здравствуйте, _d_m_, Вы писали:
___>Здравствуйте, baranovda, Вы писали:
B>>Здравствуйте, _d_m_, Вы писали:
___>... B>>"Канфэтка"!
___>Отож. cross/outer apply вобще мощная штука
Штука то мощная, но имею по ней вопрос: она входит в стандарт SQL или это расширение MSSQL?
И вопрос второй, как оно работает физически: если посмотреть план запроса (сам посмотреть не могу, так как с MSSQL не работаю), то не выполняются ли там те же джоины-агрегации, или те же аналитические(оконные) функции (называемые в этом топике партишенами)?
Путь к сердцу женщины лежать не должен.
Re[5]: [MSSQL2005] LEFT JOIN с 0..1 записью, без подзапроса
Здравствуйте, yogi, Вы писали:
___>>Отож. cross/outer apply вобще мощная штука
Y>Штука то мощная, но имею по ней вопрос: она входит в стандарт SQL или это расширение MSSQL?
Как я понял — это не стандартное расширение.
Y>И вопрос второй, как оно работает физически: если посмотреть план запроса (сам посмотреть не могу, так как с MSSQL не работаю), то не выполняются ли там те же джоины-агрегации, или те же аналитические(оконные) функции (называемые в этом топике партишенами)?
Как джойны.
Re[2]: [MSSQL2005] LEFT JOIN с 0..1 записью, без подзапроса