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

Откуда: Питер
Сообщений: 63
есть таблица, с названием Master.

Поля MasterID, ObjectType, MasterName, DocumentID, ApplicationID

И, допустим 2 или три другие таблицы

Пусть будут
Document
c полями
DocumentID, DocumentLink

ну и, скажем, Application
с полями
ApplicationID, ApplicationLink.

я хочу вывести ссылки на все объекты относящиеся к одному "Мастеру", причем ссылки должны быть в одном столбце
(они потом прогружаются на веб-страничку. И там требуется, для простоты, чтобы поле было одно, а не куча разных)
.

Пока запрос такой

(
select  [Master].MasterName as MN, Document.DocumentLink as ChildLink
from [Master] 
left join Document on 
 (
   Document.DocumentID = Master.DocumentID
 )
where [Master].MasterID = 1
)
union
(
select  [Master].MasterName as MN, [Application].ApplicationLink as ChildLink
from [Master] 
left join [Application] on 
 (
   [Application].ApplicationID = [Master].ApplicationID
 )
where [Master].MasterID = 1
)


можно ли сделать то же, но без union?
Может, есть какой-нибудь "хитрый join" вида
(
ObjectType = 'Документ' тогда left join Document on ...
ObjectType = 'Приложение' тогда left join [Application] on ...
)?

Правда тогда не понятно, из какой дочерней таблицы брать поля. Даже если они будут называться одинаково (например просто Link)...

Просто любопытно, откровенно говоря, можно ли такое сделать в принципе или "для таких случаев и придумали union, господин хороший"...

Сообщение было отредактировано: 18 июн 14, 19:09
18 июн 14, 18:59    [16184959]     Ответить | Цитировать Сообщить модератору
 Re: Однотипные данные из разных столбцов без union  [new]
Glory
Member

Откуда:
Сообщений: 104760
Kotetsu
Может, есть какой-нибудь "хитрый join" вида

Любой join - это логическое выражение, а не одно простое сравнение пары полей

select [Master].MasterName as MN, Document.DocumentLink as ChildLink
from [Master] 
left join Document on Document.DocumentID = Master.DocumentID and ObjectType = 'Документ'
left join [Application] on [Application].ApplicationID = [Master].ApplicationID and ObjectType = 'Приложение'
where [Master].MasterID = 1
18 июн 14, 19:09    [16184998]     Ответить | Цитировать Сообщить модератору
 Re: Однотипные данные из разных столбцов без union  [new]
Kotetsu
Member

Откуда: Питер
Сообщений: 63
Glory
Kotetsu
Может, есть какой-нибудь "хитрый join" вида

Любой join - это логическое выражение, а не одно простое сравнение пары полей

select [Master].MasterName as MN, Document.DocumentLink as ChildLink
from [Master] 
left join Document on Document.DocumentID = Master.DocumentID and ObjectType = 'Документ'
left join [Application] on [Application].ApplicationID = [Master].ApplicationID and ObjectType = 'Приложение'
where [Master].MasterID = 1


да это я и так знал, но все равно спасибо. Я просто вчера капитально затупил и забыл про case.

В результате получился запрос:
select [Master].MasterName as MN, 
case 
    when ObjectType = 'Документ' then Document.DocumentLink
    when ObjectType = 'Приложение' then [Application].ApplicationLink
end
as  'ChildLink'
from [Master] 
left join Document on Document.DocumentID = Master.DocumentID and ObjectType = 'Документ'
left join [Application] on [Application].ApplicationID = [Master].ApplicationID and ObjectType = 'Приложение'
where [Master].MasterID = 1


еще раз спасибо. Видимо, вчера под конец рабочего дня мозг закипел, раз до такого элементарного решения не додумался
19 июн 14, 09:23    [16186925]     Ответить | Цитировать Сообщить модератору
 Re: Однотипные данные из разных столбцов без union  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3618
а потом следующему разработчику ломай голову.
"Что это?", "почему такой ужас?", "можно было же просто union воткнуть"
19 июн 14, 10:07    [16187181]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить