SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 26.05.2010 03:04:02

abr_question
Участник
Зарегистрирован: 26.05.2010
Сообщений: 3

Запрос по определённым параметрам

Имеется таблица, в которой поля указывают на значения полей из других таблиц. Грубо говоря, так:
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 знаю, но объясняю плохо...
Надеюсь на помощь smile

Неактивен

 

#2 26.05.2010 03:38:31

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Запрос по определённым параметрам

SELECT field1, caption2, caption3 FROM Table1 JOIN Table2 ON field2=id2 JOIN Table3 ON field3=id3 WHERE field1 in (1,2)
UNION
SELECT field1, caption2, caption4 FROM Table1 JOIN Table2 ON field2=id2 JOIN Table4 ON field3=id4 WHERE field1=4;

Неактивен

 

#3 26.05.2010 13:09:50

abr_question
Участник
Зарегистрирован: 26.05.2010
Сообщений: 3

Re: Запрос по определённым параметрам

vasya, спасибо огромное! Ето то, что мне и надо smile
Один вопрос для уточнения, можно ли вынести каким-то образом за пределы UNION общие для двух запросов поля?
У меня в обоих select'ах по 10 полей, а разница в них всего лиш в одном поле, и поетому общий запрос довольно сильно вырастает в длину.

Неактивен

 

#4 26.05.2010 14:23:16

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Запрос по определённым параметрам

Можно всё! Но вот нужно ли?
Длина запроса не самый важный параметр. Но если вы считаете, что приведенная ниже конструкция будет работать быстрее (или также как изначальный запрос) и более удобна для разработчиков (например, интуитивно понятна или удовлетворяет их эстетическим чувствам), чем повторное перечисление 9ти полей, то

select field1, caption2, caption3 from
(select field1, caption2,@i:=@i+1 i from Table1 JOIN Table2 ON field2=id2,(select @i:=0)z order by field1)t1
join
(select caption3, @j:=@j+1 j from
(select field1,caption3 FROM Table1 JOIN  Table3 ON field3=id3 WHERE field1 in (1,2)
union
select field1,caption4 FROM Table1 JOIN Table4 ON field3=id4 WHERE field1=4)t,(select @j:=0)z1 order by field1)t2
on i=j;

Неактивен

 

#5 26.05.2010 14:32:24

abr_question
Участник
Зарегистрирован: 26.05.2010
Сообщений: 3

Re: Запрос по определённым параметрам

Ладно, в принципе приложение небольшое, а разработчики могут быть и после меня. Пусть остаётся первый вариант.
Спасибо!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson