Запрос с условием выбора таблицы
Table1 (int field1, int field2, int field3)
Table2 (int id2, varchar caption2)
Table3 (int id3, varchar caption3)
Table4 (int id4, varchar caption4)
Необходим запрос, который бы вывел таблицу со следующими полями: field1, caption2, caption3
на примере ето выглядит так:
Table1:
<1><1><1>
<2><2><3>
Table2:
<1><раз>
<2><два>
Table3:
<1><raz>
<2><dva>
<3><tri>
Запрос выводит:
<1><раз><raz>
<2><два><tri>
В общем, проблема не сколько в составлении такого запроса, сколько в том, что от поля field1 зависит, из какой таблицы будет браться третье поле запроса. То есть, если field1 равно 1 или 2, то третье поле в запросе будет выводить caption3, а вот если field1 = 4, то третье поле запроса должно выводить caption4.
Извиняюсь за непрофессиональный язык. Я вроде SQL знаю, но объясняю плохо...
Надеюсь на помощь :)
Почему - "если field1 = 4, то третье поле запроса должно выводить caption4." - ? А если 5?
Проверить условие в запросе можно например CASE...WHEN... END в нормальных БД либо IIF - в экцесс.
Не совсем по данной теме, но ета ссылка мне тоже помогла. У меня поле field1 принимает только три значения и для вывода в запрос его текстового представления воспользуюсь case'ом ;) Спасибо ;)
Так она ж для примера. Если полностью описывать задачу, тут на полстраницы выйдет...
Пяти не будет чисто практически. Фактически в базу можно запульнуть и 5 и 6 и даже 330, но серьёзный админ у моих заказчиков не будет специально вручную открывать запароленную базу данных, чтобы побаловатся таким образом. А программа, которую я пишу, просто напросто не даёт записывать другие значения.
ЗЫ. Мне подсказали, что данная запрос UNION'ом делается, вроде получилось. Вам за помощ спасибо ;)
1. Делаем view всех возможных вариантов. Что-то типа...
select
t1.field1,
t2.caption2,
t3.caption3,
t4.caption4
from
table1 t1,
table2 t2,
table3 t3,
table4 t4
where
t1.field2=t2.id2 and
t1.field3=t3.id3 and
t1.field3=t4.id4
2. Пытаемся составить запрос
field1,
caption2,
decode(field1, 1, caption3, 2, caption3, 4, caption4) caption34
from xyz;
1. Делаем view всех возможных вариантов. Что-то типа...
select
t1.field1,
t2.caption2,
t3.caption3,
t4.caption4
from
table1 t1,
table2 t2,
table3 t3,
table4 t4
where
t1.field2=t2.id2 and
t1.field3=t3.id3 and
t1.field3=t4.id4
2. Пытаемся составить запрос
field1,
caption2,
decode(field1, 1, caption3, 2, caption3, 4, caption4) caption34
from xyz;
СУБД - Ms Access
В принципе, уже работает при помощи UNION, но на заметку возьму, спасибо ;)