Создание представления из четырех таблиц

temmka
Дата: 24.01.2013 19:31:21
Здравствуйте уважаемые специалисты!) Помогите решить вопрос:
Есть 4 таблицы:

Таблица 1 - Types (Типы компонентов)
Number(int)
Name(String)

Таблица 2 - Dry (Сухие компоненты)
Number(int)
Name(String)
Type(int) (во всех полях =1)


Таблица 3- Liquid(Жидкие компоненты)
Number(int)
Name(String)
Type(int) (во всех полях =2)


и основная

Таблица 4 - Mixer (Емкость)
Number(int)
Name(string)
ComponentType(int) // номер типа из таблицы Types
ComponentNumber(int) // номер компонента из таблицы Dry или Liquid в зависимости от типа

Вопрос в создании представления типа:

Mixer.Name|Types.Name|Dry/Liquid.Name

то есть в зависимости от значения типа в таблице Mixer нужно вывести Название компонента или из таблицы Dry или из Liquid..
Возможно вообще такое средствами SQL?
буду рад любым ответам..)
pkarklin
Дата: 24.01.2013 19:37:16
автор
буду рад любым ответам..)


1. ComponentType из таблицы Mixer убрать;
2. Из таблиц Dry и Liquid сделать одну, введя туда ComponentType;

Получаем один запрос из трех таблиц.

Если нужен гемморой из Dry и Liquid с помощью UNION ALL делаем представление и уже его используем в запросе.
Cygapb-007
Дата: 24.01.2013 20:02:14
+
;with
Таблица1 as (-- Types (Типы компонентов) (Number(int),Name(String))
   select * from (values (1,'DRY'), (2,'LIQUID')) tmp(Number,Name)),
Таблица2 as (-- Dry (Сухие компоненты) (Number(int),Name(String),Type(int) (во всех полях =1))
   select * from (values (2,'dry2'), (4,'dry4')) tmp(Number,Name)),
Таблица3 as (-- Liquid(Жидкие компоненты) (Number(int),Name(String),Type(int) (во всех полях =2))
   select * from (values (4,'liq4'), (8,'liq8')) tmp(Number,Name)),
-- и основная Таблица4 
--Mixer(Емкость) (Number(int), Name(string), 
--ComponentType(int) // номер типа из таблицы Types, 
--ComponentNumber(int) // номер компонента из таблицы Dry или Liquid в зависимости от типа
Mixer as ( 
   select * from (values
      (1,'mix1', 2, 4), 
      (2,'mix2', 1, 4)
      )tmp(Number, Name, ComponentType, ComponentNumber)
   )
-- Вопрос в создании представления типа: Mixer.Name|Types.Name|Dry/Liquid.Name
-- то есть в зависимости от значения типа в таблице Mixer 
-- нужно вывести Название компонента или из таблицы Dry или из Liquid
select 
      m.Number, m.Name, t1.Name TypeName, 
      case m.ComponentType when 1 then t2.Name else t3.Name end ComponentName
from Mixer m 
join Таблица1 t1 on t1.Number=m.ComponentType
left join Таблица2 t2 on t2.Number=m.ComponentNumber
left join Таблица3 t3 on t3.Number=m.ComponentNumber