Найти - Пользователи
Полная версия: Обьеденить 4 таблици
Начало » Базы данных » Обьеденить 4 таблици
1
brutalsuperman
Есть 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);
                    
FishHook
select  d.type,d.name ,  с.value, s.value, u.value
brutalsuperman
FishHook
Я уже так пробовал, в результате создает три колонки Value Value1 Value2
PooH
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: ну или выводите все три столбца и обрабатывате уже в вызывающем коде.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB