Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 11, 2016 18:31:23

brutalsuperman
От: Киев
Зарегистрирован: 2015-12-20
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Обьеденить 4 таблици

Есть 4 таблици. Doc, UDoc, SDoc, CDoc. Doc- Name Type, остальные Name Value Type, если тип 1 выводим name и value из udoc, если 2 то из sdoc, если 3 то из cdoc. Код который я добавил выводит все записи из Doc и добавляет колонку Value, но заполняет только одно значение из cdoc( которое в последнем join). Почему остальные не заполняет?




select  d.type,d.name ,  value
from doc d
    left join udoc u  on( d.name =u.name 
                    and d.type=u.type)
    left join sdoc s on (d.name=s.name
                    and d.type=s.type)
    left join cdoc c on (d.name=c.name
                    and d.type=c.type);
                    

Офлайн

#2 Янв. 11, 2016 18:46:56

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8268
Репутация: +  565  -
Профиль   Отправить e-mail  

Обьеденить 4 таблици

select  d.type,d.name ,  с.value, s.value, u.value



Офлайн

#3 Янв. 11, 2016 19:31:51

brutalsuperman
От: Киев
Зарегистрирован: 2015-12-20
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Обьеденить 4 таблици

FishHook
Я уже так пробовал, в результате создает три колонки Value Value1 Value2

Офлайн

#4 Янв. 12, 2016 05:28:53

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Обьеденить 4 таблици

brutalsuperman
Почему остальные не заполняет?
А почему он должен их заполнять? Кто и где вам обещал, что это должно работать так? И что он, кстати, по вашему должен был бы заполнить если бы значение value было бы заполнено в двух из этих таблиц? Чтобы сделать, то что вы хотите, надо самому написать выражение. В разных базах данных они могут отличатся, вы какую используете? Для поддерживающих SQL2003 это будет выглядеть примерно так:
select  d.type,d.name ,  
     case
         when not u.value is null then u.value
         when not s.value is null then s.value
         when not c.value is null then c.value
         else ''
     end as 'value'
from doc d
    left join udoc u  on( d.name =u.name 
                    and d.type=u.type)
    left join sdoc s on (d.name=s.name
                    and d.type=s.type)
    left join cdoc c on (d.name=c.name
                    and d.type=c.type);

PS: ну или выводите все три столбца и обрабатывате уже в вызывающем коде.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Отредактировано PooH (Янв. 12, 2016 05:32:31)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version