Если это трудный запрос, то видимо ты ТРУДНЫХ запросов никогда не видел.
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>Попробуем решить? У меня что-то свежих мыслей нет. В один запрос ну никак поместить это не выходит.
Выборку третьего поля похоже придется делать подзапросом, но ничего сложного я тут все равно пока не наблюдаю.
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)?
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)
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 подзабывать стал
Здравствуйте, AVG, Вы писали:
AVG>1. использовать подзапрос:
...
AVG>2. использовать группировку:
...
Второй вариант у меня не работает. Не охота разбираться почему. А за первый еще раз спасибо. У меня надо было связать таким образом 6 таблиц алгоритм №1 работает просто супер. Еще раз thanks a lot!!!! Записей не много, около 3 тыс. Все махом выполняется.
Здравствуйте, 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