Трудный запрос MySQL или MSSQLServer
От: theOne Россия  
Дата: 05.11.03 09:19
Оценка:
Есть три таблицы


table1
uniq
t1f1   t1f2
1     bla-bla-bla1
2     bla-bla-bla2
3     bla-bla-bla3

table2
uniq
t2f1 t1f1 t2f3
1     1    tbl2-bla-bla-bla1
2     1    tbl2-bla-bla-bla2
3     2    tbl2-bla-bla-bla1

table3
uniq
t3f1 t2f1 t3f3
1     1    tbl3-bla-bla-bla1
2     1    tbl3-bla-bla-bla2
3     2    tbl3-bla-bla-bla3
4     2    tbl3-bla-bla-bla4
5     2    tbl3-bla-bla-bla5

Есть значение 1 для поля t1f1 (t1f1=1) таблицы table1 и естественно получается и для таблицы table2
Необходимо получить:
t2f1 t2f3                 t3f3
1     tbl2-bla-bla-bla1   tbl3-bla-bla-bla1
2     tbl2-bla-bla-bla2   tbl3-bla-bla-bla3



Попробуем решить? У меня что-то свежих мыслей нет. В один запрос ну никак поместить это не выходит.
Люди добрые, пожите Please.
Re: Трудный запрос MySQL или MSSQLServer
От: Lexey Россия  
Дата: 05.11.03 09:40
Оценка:
Здравствуйте, theOne, Вы писали:


Если это трудный запрос, то видимо ты ТРУДНЫХ запросов никогда не видел.

O>Есть значение 1 для поля t1f1 (t1f1=1) таблицы table1 и естественно получается и для таблицы table2

O>Необходимо получить:
O>t2f1 t2f3 t3f3
O>1 tbl2-bla-bla-bla1 tbl3-bla-bla-bla1
O>2 tbl2-bla-bla-bla2 tbl3-bla-bla-bla3
O>[/code]

Не понятен принцип выборки 3-го поля. Это просто взятие первой записи, соответствующей определенному t2f1 или что?

O>Попробуем решить? У меня что-то свежих мыслей нет. В один запрос ну никак поместить это не выходит.


Выборку третьего поля похоже придется делать подзапросом, но ничего сложного я тут все равно пока не наблюдаю.
Re: Трудный запрос MySQL или MSSQLServer
От: Satrapp Россия  
Дата: 05.11.03 09:48
Оценка: -2
Здравствуйте, theOne, Вы писали:

O>Есть три таблицы


O>

O>table1
O>uniq
O>t1f1   t1f2
O>1     bla-bla-bla1
O>2     bla-bla-bla2
O>3     bla-bla-bla3

O>table2
O>uniq
O>t2f1 t1f1 t2f3
O>1     1    tbl2-bla-bla-bla1
O>2     1    tbl2-bla-bla-bla2
O>3     2    tbl2-bla-bla-bla1

O>table3
O>uniq
O>t3f1 t2f1 t3f3
O>1     1    tbl3-bla-bla-bla1
O>2     1    tbl3-bla-bla-bla2
O>3     2    tbl3-bla-bla-bla3
O>4     2    tbl3-bla-bla-bla4
O>5     2    tbl3-bla-bla-bla5

O>Есть значение 1 для поля t1f1 (t1f1=1) таблицы table1 и естественно получается и для таблицы table2
O>Необходимо получить:
O>t2f1 t2f3                 t3f3
O>1     tbl2-bla-bla-bla1   tbl3-bla-bla-bla1
O>2     tbl2-bla-bla-bla2   tbl3-bla-bla-bla3
O>



O>Попробуем решить? У меня что-то свежих мыслей нет. В один запрос ну никак поместить это не выходит.

O>Люди добрые, пожите Please.

select t2.t2f1, t2.t2f3, t3.t3f3
from table1 t1 inner join table2 t2 on t1.t1f1=t2.t1f1
inner join table3 t3 on t2.t2f1=t3.t2f1
where t1.t1f1=1
Re: Трудный запрос MySQL или MSSQLServer
От: LantY Россия icq:56949749
Дата: 05.11.03 09:56
Оценка:
Здравствуйте, theOne, Вы писали:
O>
O>Есть значение 1 для поля t1f1 (t1f1=1) таблицы table1 и естественно получается и для таблицы table2
O>Необходимо получить:
O>t2f1 t2f3                 t3f3
O>1     tbl2-bla-bla-bla1   tbl3-bla-bla-bla1
O>2     tbl2-bla-bla-bla2   tbl3-bla-bla-bla3
O>

Мдя...
Поясни, каким образом ты хочешь наложить ограничение на выбор записей из table3?
На вскидку еже есть два разных варианта: min(t3f3), min(t2f1)?
С уважением, Дмитрий.
Re[2]: Трудный запрос MySQL или MSSQLServer
От: Lexey Россия  
Дата: 05.11.03 10:04
Оценка:
Здравствуйте, Satrapp, Вы писали:

S>select t2.t2f1, t2.t2f3, t3.t3f3

S>from table1 t1 inner join table2 t2 on t1.t1f1=t2.t1f1
S>inner join table3 t3 on t2.t2f1=t3.t2f1
S>where t1.t1f1=1

Во-первых, это даст 4 строки, а не 2, как в условии.
Во-вторых, join с table1 тут нафиг не нужен.
Re: Трудный запрос MySQL или MSSQLServer
От: AVG  
Дата: 05.11.03 11:16
Оценка: 3 (1) +1
Здравствуйте, theOne, Вы писали:

O>Есть три таблицы


O>

O>table1
O>uniq
O>t1f1   t1f2
O>1     bla-bla-bla1
O>2     bla-bla-bla2
O>3     bla-bla-bla3

O>table2
O>uniq
O>t2f1 t1f1 t2f3
O>1     1    tbl2-bla-bla-bla1
O>2     1    tbl2-bla-bla-bla2
O>3     2    tbl2-bla-bla-bla1

O>table3
O>uniq
O>t3f1 t2f1 t3f3
O>1     1    tbl3-bla-bla-bla1
O>2     1    tbl3-bla-bla-bla2
O>3     2    tbl3-bla-bla-bla3
O>4     2    tbl3-bla-bla-bla4
O>5     2    tbl3-bla-bla-bla5

O>Есть значение 1 для поля t1f1 (t1f1=1) таблицы table1 и естественно получается и для таблицы table2
O>Необходимо получить:
O>t2f1 t2f3                 t3f3
O>1     tbl2-bla-bla-bla1   tbl3-bla-bla-bla1
O>2     tbl2-bla-bla-bla2   tbl3-bla-bla-bla3
O>



O>Попробуем решить? У меня что-то свежих мыслей нет. В один запрос ну никак поместить это не выходит.

O>Люди добрые, пожите Please.

Если что-то нитак в синтаксисе, просьба сильно не пинать... работаю с Sybase и Oracle, но насколько знаю Sybase и MSSQL до какой то версии практически одно и то-же

1. использовать подзапрос:
select t2.t2f1, t2.t2f3, t3.t3f3
from table2 t2, table3 t3
where t2.t1f1=1
and t2.t2f1=t3.t2f1
and t3.t3f1=(select min(t3f1) from table3 tt3 where tt3.t2f1=t2.t2f1)


2. использовать группировку:
select t2.t2f1, t2.t2f3, t3.t3f3
from table2 t2, table3 t3
where t2.t1f1=1
and t2.t2f1=t3.t2f1
group by t2.t2f1, t2.t2f3
having t3.t3f1=min(t3.t3f1)
Re[2]: Трудный запрос MySQL или MSSQLServer
От: theOne Россия  
Дата: 05.11.03 11:32
Оценка:
Здравствуйте, AVG, Вы писали:


AVG>1. использовать подзапрос:

AVG>select t2.t2f1, t2.t2f3, t3.t3f3
AVG>from table2 t2, table3 t3
AVG>where t2.t1f1=1
AVG> and t2.t2f1=t3.t2f1
AVG> and t3.t3f1=(select min(t3f1) from table3 tt3 where tt3.t2f1=t2.t2f1)


Этот вариант пришелся мне по душе. Скромненько и с большим вкусом. Все работает на ура. Все же приятно когда тебе дают дельные советы . Сам-то я SQL подзабывать стал
Re[2]: Трудный запрос MySQL или MSSQLServer
От: theOne Россия  
Дата: 05.11.03 11:55
Оценка:
Здравствуйте, AVG, Вы писали:

AVG>1. использовать подзапрос:

...

AVG>2. использовать группировку:

...

Второй вариант у меня не работает. Не охота разбираться почему. А за первый еще раз спасибо. У меня надо было связать таким образом 6 таблиц алгоритм №1 работает просто супер. Еще раз thanks a lot!!!! Записей не много, около 3 тыс. Все махом выполняется.
Re: Трудный запрос MySQL или MSSQLServer
От: kadalex Россия  
Дата: 06.11.03 08:39
Оценка:
Здравствуйте, theOne, Вы писали:

O>Есть три таблицы


O>

O>table1
O>uniq
O>t1f1   t1f2

O>table2
O>uniq
O>t2f1 t1f1 t2f3

O>table3
O>uniq
O>t3f1 t2f1 t3f3

O>Есть значение 1 для поля t1f1 (t1f1=1) таблицы table1 и естественно получается и для таблицы table2
O>Необходимо получить:
O>t2f1 t2f3                 t3f3
O>1     tbl2-bla-bla-bla1   tbl3-bla-bla-bla1
O>2     tbl2-bla-bla-bla2   tbl3-bla-bla-bla3
O>


O>Попробуем решить? У меня что-то свежих мыслей нет. В один запрос ну никак поместить это не выходит.

O>Люди добрые, пожите Please.

вот пример запроса:
select t2.t2f1, t2.t2f3, (select top 1 t3f3 from table3 t3 where t3.t2f1=t2.t2f1) from table2 t2 inner join table1 t1 on t1.t1f1=t2.t1f1 where t1.t1f1=1

или
select t2.t2f1, t2.t2f3, (select top 1 t3f3 from table3 t3 where t3.t2f1=t2.t2f1) from table2 t2 where t2.t1f1=1

только это решение не дает однозначного ответа, но при заполнении таблиц в том порядке который вы привели, в результате выполнения запроса получим такую выборку:
t2f1 t2f3 t3f3
1 tbl2-bla-bla-bla1 tbl3-bla-bla-bla1
2 tbl2-bla-bla-bla2 tbl3-bla-bla-bla3
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.