Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Запрос с условием выбора таблицы

55K
26 мая 2010 года
abr_gtk
4 / / 31.01.2010
Имеется таблица, в которой поля указывают на значения полей из других таблиц. Грубо говоря, так:
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 знаю, но объясняю плохо...
Надеюсь на помощь :)
339
26 мая 2010 года
verybadbug
619 / / 12.09.2005
не совсем ясно, чего вы хотите, может это поможет http://mysqlblog.ru/archives/23
1
26 мая 2010 года
kot_
7.3K / / 20.01.2000
Вы не только объясняете плохо - у вас и структура корявая.
Почему - "если field1 = 4, то третье поле запроса должно выводить caption4." - ? А если 5?
Проверить условие в запросе можно например CASE...WHEN... END в нормальных БД либо IIF - в экцесс.
55K
26 мая 2010 года
abr_gtk
4 / / 31.01.2010
Цитата: verybadbug
не совсем ясно, чего вы хотите, может это поможет http://mysqlblog.ru/archives/23


Не совсем по данной теме, но ета ссылка мне тоже помогла. У меня поле field1 принимает только три значения и для вывода в запрос его текстового представления воспользуюсь case'ом ;) Спасибо ;)

Цитата: kot_
Вы не только объясняете плохо - у вас и структура корявая.


Так она ж для примера. Если полностью описывать задачу, тут на полстраницы выйдет...

Цитата: kot_
Почему - "если field1 = 4, то третье поле запроса должно выводить caption4." - ? А если 5?


Пяти не будет чисто практически. Фактически в базу можно запульнуть и 5 и 6 и даже 330, но серьёзный админ у моих заказчиков не будет специально вручную открывать запароленную базу данных, чтобы побаловатся таким образом. А программа, которую я пишу, просто напросто не даёт записывать другие значения.


ЗЫ. Мне подсказали, что данная запрос UNION'ом делается, вроде получилось. Вам за помощ спасибо ;)

412
26 мая 2010 года
grgdvo
323 / / 04.07.2007
Связи по полям есть между таблицами? Какая СУБД?

1. Делаем view всех возможных вариантов. Что-то типа...
Код:
create view xyz as
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. Пытаемся составить запрос
 
Код:
select
  field1,
  caption2,
  decode(field1, 1, caption3, 2, caption3, 4, caption4) caption34
from xyz;
55K
26 мая 2010 года
abr_gtk
4 / / 31.01.2010
Цитата: grgdvo
Связи по полям есть между таблицами? Какая СУБД?

1. Делаем view всех возможных вариантов. Что-то типа...
Код:
create view xyz as
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. Пытаемся составить запрос
 
Код:
select
  field1,
  caption2,
  decode(field1, 1, caption3, 2, caption3, 4, caption4) caption34
from xyz;



СУБД - Ms Access
В принципе, уже работает при помощи UNION, но на заметку возьму, спасибо ;)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог