SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 14.04.2011 15:53:19

master_alf
Участник
Зарегистрирован: 14.04.2011
Сообщений: 4

JOIN дополнительной таблицы в зависимости от хранимого значения в первой.

Приветствую, поиском пользовался - ответа не нашел sad

Такая задачка вылезла...

Есть три таблицы с именами prefix_type1, prefix_type2, prefix_type3.
Есть еще одна таблица reports, в которой хранятся type нужной нам таблицы, и id строки, где лежат нужные данные...
Вопрос такой: как сформировать запрос, что бы в зависимости от значения report.type конкретной строки, к ответу JOIN-ились данные из нужной таблицы?

Исправлено:
т.е.

SELECT tables.fields FROM reports LEFT JOIN prefix_(нужный тип берется из reports.type) ON reports.type_id = prefix_(нужный тип).id


К сожалению в MySQL я не силен, потому, если есть возможность - отвечайте со скидкой на чайника smile

Отредактированно master_alf (14.04.2011 16:17:24)

Неактивен

 

#2 16.04.2011 00:34:31

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: JOIN дополнительной таблицы в зависимости от хранимого значения в первой.

Так сделать нельзя. Более того, возникновение такой задачи говорит о том, что
Вы, скорее всего, плохо храните данные (в частности, Вы могли бы сделать одну
таблицу с типом вместо трех разных без типа).

В качестве ближайшего костылика могу предложить
SELECT ... FROM reports JOIN table1 ON ... WHERE reports.type = 1
UNION
SELECT ... FROM reports JOIN table2 ON ... WHERE reports.type = 2
...

Неактивен

 

#3 16.04.2011 20:53:24

master_alf
Участник
Зарегистрирован: 14.04.2011
Сообщений: 4

Re: JOIN дополнительной таблицы в зависимости от хранимого значения в первой.

Спасибо за совет, но одну таблицу сделать не получается. sad
К сожалению структура таблицы в зависимости от типа товара отличается немного... так что зашел с другой стороны - делаю отдельные запросы по каждому типу.

Неактивен

 

Board footer

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