Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > SELECT из нескольких таблиц по условию


Автор: ida 26.4.2004, 10:14
Есть Таблица1, в одном из полей которой (Поле2) находятся уникальные значения (строки). Есть Таблица2, Таблица3 и Таблица4, состоящие каждая из двух полей, первое из которых - ID, второе - строка (все значения уникальные). Есть Таблица5, связыващая три последних с первой, в которой хранятся только ID соответствующих значений. Каждая ее запись выглядит примерно так:

| ID5 | ID1 | ID2 | ID3 | ID4 |

Где столбец ID1 содержит уникальные значения, столбцы ID2, ID3, ID4 могут содержать повторяющиеся значения.

Требуется составить запрос, который бы получал из переменных (var2, var3, var4) значения ID2, ID3, ID4, по ним находил в Таблице5 соответствующие значения ID1 и выводил на экран примерно следующее:

Табл1.Поле2 | Табл1. ... | Табл2.Поле2 | Табл3.Поле2 | Табл4.Поле2 |

Причем если одна из переменных - пустая строка (""), то это означает, что нужно найти все значения соответствующего ID. Если все переменные равны "", то на экране должно появиться столько строк, сколько записей в Таблице5.

Автор: jonik_Dk 26.4.2004, 11:07
Я не знаю MySql, поэтому встречный вопрос тебе одним запросом это надо или можно через временные таблицы (если они есть в MySQL)

Автор: jonik_Dk 26.4.2004, 11:47
Можно попробовать так:

Переменные ты передаешь из программы и соответственно можешь проанализировать их и если они у тебя пустые поставь '*' (для условия LIKE)

Select поля... from 1,2,3,4,5
where 1.id1 in (select 5.id1 from 5
where id2 LIKE var2 and
id3 LIKE var3 and
id4 LIKE var4) and
1.id1=5.id1 and 2.id2=5.id2 and 3.id3=5.id3 and 4.id4=5.id4


Это на скорую руку, много не думая. Наверняка можно получше придумать, времени нет, но такой запрос очень долго будет работать.

Если можно то лучше через временные таблицы написать, гораздо быстрей будет работать.
Если есть временные таблицы могу написать и через временные таблицы.
Оптимизировать запрос уже сам будешь !!!


Автор: ida 26.4.2004, 12:55
Я не знаю, что такое временные таблицы, и не хочу с ними ковыряться. Знаю, что можно сделать одним запросом, но конкретно в данном случае как, пока не дошло.

Автор: jonik_Dk 26.4.2004, 13:10
Ну а то, что я тебе предложил тебе не годиться ?

Автор: Secandr 27.4.2004, 09:31
ida Пользуйся join

SELECT что-то FROM t1 LEFTJOIN t5 ON t1.pole2=t5.id1 LEFTJOIN t2 ON t2.pole1=t5.id2 и т.д. и т.п.
Добавлено @ 09:32
над всеми темами есть топик с помощью по БД, прочти его, там много интересного в том числе и про JOIN

Автор: GoodBoy 27.4.2004, 10:25
2 jonik_Dk в MySQL, к сожалению, пока нет вложенных селектов...

Автор: jonik_Dk 27.4.2004, 10:31
Sorry, я не знал

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)