Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SQL заморочка [D5, IB6.x]


ALexe ©   (2002-09-25 10:22:00) 

имеем три таблицы:
1. Table1
id1 integer
name string
2. Table2
id2 integer
name string
3. Table3
id3 <- содержит id1 или id2
ido 0/1
Как можно получить в SQL получить
"name" из Table1 при id0=0 и
"name" из Table2 при id0=1 ?

.. или при помощи хранимой процедуры в InterBase6 ?

заранее благодарен .. Алексей ;-)


ALexe   (2002-09-25 11:58:00) [1]

я так и сделал ;-)))


Johnmen   (2002-09-25 11:55:00) [2]

SELECT T3.id3, T3.ido,
(SELECT T1.name FROM Table1 T1
WHERE (T1.id1=T3.id3) AND (T3.ido=0)) AS F1
FROM Table3 T3
UNION
SELECT T3.id3, T3.ido,
(SELECT T2.name FROM Table2 T2
WHERE (T2.id2=T3.id3) AND (T3.ido=1)) AS F1
FROM Table3 T3


ALexe   (2002-09-25 11:43:00) [3]

красиво но не то - результирующее поле NAME надо одно !!!
спасибо


Johnmen   (2002-09-25 11:07:00) [4]

SELECT T3.id3, T3.ido,
(SELECT T1.name FROM Table1 T1
WHERE (T1.id1=T3.id3) AND (T3.ido=0)) AS F1,
(SELECT T2.name FROM Table2 T2
WHERE (T2.id2=T3.id3) AND (T3.ido=1)) AS F2
FROM Table3 T3


ALexe   (2002-09-25 11:05:00) [5]

спасибо за идею - решение оказывается лежит под носом!!!
СПАСИБО


passm   (2002-09-25 10:54:00) [6]

Есть ли в IB функция типа COALESCE(VALUE1, VALUE2) которая возвращает VALUE1 если VALUE1 IS NOT NULL; в противном случае VALUE2? Если нет то можно написать UDF самому.
P. S. Просто ей можно восспользоваться в запросе указанном <passm © (25.09.02 10:34)>. Да и вообще вещь полезная.


ALexe   (2002-09-25 10:44:00) [7]

немного не то - надо получить одно поле Name

это можно сделать не красиво:
SELECT T3.*, T1.NAME
FROM TABLE3 T3
LEFT OUTER JOIN TABLE1 T1 ON (T3.ID3 = T1.ID1 AND T3.ID0 = 0)
UNION
SELECT T3.*, T2.NAME
FROM TABLE3 T3
LEFT OUTER JOIN TABLE2 T2 ON (T3.ID3 = T2.ID2 AND T3.ID0 = 1)

а как еще ?


passm   (2002-09-25 10:34:00) [8]

SELECT T3.ID3, T1.NAME, T2.NAME
FROM TABLE3 T3
LEFT OUTER JOIN TABLE1 T1 ON (T3.ID3 = T1.ID1 AND T3.ID0 = 0)
LEFT OUTER JOIN TABLE2 T2 ON (T3.ID3 = T2.ID2 AND T3.ID0 = 1)
Если я правильно тебя понял.


Наверх

Титульная страница Поиск, карта сайта Написать письмо