Как сделать одним запросом несколько селектов с разными наборами даных?

Khusainov_Heckfy
Дата: 21.02.2010 18:35:40
Суть в следующем.
Есть 3 таблицы (упростим таблички), в одной "магазин автозапчастей" (ID_M, NAME), в другой "прайс" (ID_P,ID_M,ID_MARKA,NAME,PRICE), тут ID_MARK это ID шник марки авто, в другой таблице MARKS допустим.

вот, и мне надо вывести список этих магазинов просто, ну например их там 200 штук.
в asp.net мне надо вывести
МАГАЗИН №1  Автозапчасти для ВАЗ, ГАЗ, УАЗ
и ссылки на страницы с газом, пазом и уазом

тоесть мне надо как то получить в запросе
select по магазинам+select distinct ID_MARK по прайсам+ select по этим маркам

вот как такое можно одним запросом сделать....?? подскажите плиз.. а то щас на старнице выполняется один запрос по магазинам, а потом к каждому магазину еще один запрос на вывод этих марок+ еще в коде потом я формирую строку с сылками посредством foreach

заранее благодарен! не гнобите плиз если я плохие сильно вещи написал

да и тему чето долго не мог нормально обозвать)
Khusainov_Heckfy
Дата: 21.02.2010 18:37:31
по сути вот тут можно посмотреть что в результате у меня сейчас, и это долго работает естесственно...
Khusainov_Heckfy
Дата: 21.02.2010 18:55:29
Вот такой код самой процы той, которую я запускаю уже после вывода магазинов...

	select distinct m.ID_MARK , m.MarkName from Catalog_MARK m
	inner join Provider_Price p on (m.ID_MARK = p.ID_MARK)
	where p.ID_provider = @ID_Provider
Cергей L
Дата: 21.02.2010 20:23:56
Khusainov_Heckfy,
может это подойдет
select s.shop + ' ' +
        ( select mark as mark from
        ( select 'ВАЗ' mark, 1 id_mark
          union all
          select 'ГАЗ', 2 ) a
          where exists ( select * from ( select 1 id_mark, 1 id_shop ) price
                         where price.id_mark = a.id_mark
                                  and price.id_shop = s.id_shop )
                for xml path ('') )
from (select 'МАГАЗИН №1  Автозапчасти ' shop, 1 id_shop)s
Khusainov_Heckfy
Дата: 22.02.2010 09:47:44
хм... а можно поподробней? чтото я не могу понять что тут и как.. :(
Cергей L
Дата: 22.02.2010 11:46:22
Khusainov_Heckfy,
так пойдет
declare @shop  table (ID_M integer, NAME varchar(80));
declare @price table (ID_P integer, ID_M integer, ID_MARK integer);
declare @marks table (ID_MARK integer, NAME varchar(80));

insert into @shop values (1, 'МАГАЗИН №1  Автозапчасти');
insert into @shop values (2, 'МАГАЗИН №2  Автозапчасти');
insert into @shop values (3, 'МАГАЗИН №3  Автозапчасти');

insert into @price values (1, 1, 1);
insert into @price values (2, 1, 2);
insert into @price values (3, 2, 1);
insert into @price values (4, 3, 2);
insert into @price values (5, 3, 2);

insert into @marks values (1, 'ВАЗ');
insert into @marks values (2, 'УАЗ');
insert into @marks values (3, 'ГАЗ');

select s.name + ' ' +
        ( select m.name + ' ' from @marks m
          where exists ( select * from @price p
                         where p.ID_MARK = m.ID_MARK and p.ID_M = s.ID_M )
                for xml path ('') )
from @shop s

можно добавить еще коалески и запятые, но это будет уже менее наглядно.
Khusainov_Heckfy
Дата: 22.02.2010 12:20:43
ага, спасибо! Все понял что вы имели ввиду))
Khusainov_Heckfy
Дата: 22.02.2010 12:29:25
select pr.name ,
        ( select m.MarkName, m.ID_MARK from Catalog_MARK m
          where exists ( select * from Provider_Price p
                         where p.ID_MARK = m.ID_MARK and p.ID_Provider = pr.ID_Provider )
                for xml path ('') )
from Providers pr

получилось! И так быстро еще работает!
Cергей L, спасибо большое!