Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Получить общие строки из зависимой таблицы  [new]
tigerxml
Guest
Скажем есть 2 таблицы

Товары категорий и Категории

Нужно вывести в списке только те категории, которые есть у всех выбранных товаров, причем у каждого товара.

например что то вроде
select cat_id from cat_product where product_id in (1,2,3,4,..)

и если у всех товаров общая рубрика только Авто, тогда показывать только её, независимо от того, сколько еще у каждого товара рубрик.

Сходу что - то не получилось придумать, как это сделать.

Есть идеи?

Заранее благодарен.
15 сен 11, 22:49    [11284278]     Ответить | Цитировать Сообщить модератору
 Re: Получить общие строки из зависимой таблицы  [new]
Col
Member

Откуда: Торонто
Сообщений: 186
JOIN
Читать тут
16 сен 11, 03:00    [11284735]     Ответить | Цитировать Сообщить модератору
 Re: Получить общие строки из зависимой таблицы  [new]
iljy
Member

Откуда:
Сообщений: 8711
tigerxml,

делаете группировку по катагориям отобранных товаров, затем (HAVING) оставляете только те категории, в которых количество товаров совпадает с общим количеством отобранных. У вас будут cat_id нужных категорий, дальше JOIN
16 сен 11, 10:48    [11285603]     Ответить | Цитировать Сообщить модератору
 Re: Получить общие строки из зависимой таблицы  [new]
tigerxml
Member

Откуда:
Сообщений: 5
Col,
Если честно - то не понял как с помощью Join это сделать, может простой пример приведете?
Как сделать что бы все записи были - это просто, а вот что бы только общие...
iljy,

Да, кстати, вчера написал сообщение, и тоже такой вариант в голову пришел - спасибо большое, попробую так сделать, только вот я еще не уверен насколько быстро это будет работать.
16 сен 11, 12:03    [11286423]     Ответить | Цитировать Сообщить модератору
 Re: Получить общие строки из зависимой таблицы  [new]
tigerxml
Member

Откуда:
Сообщений: 5
Действительно, с Having очень просто получилось.
Для тех, кто будет искать решение похожей проблемы:

Таблицы:
CREATE TABLE [prsites] (
	[id] [int] IDENTITY (1, 1) NOT NULL ,
	[name] [varchar] (50) COLLATE Cyrillic_General_CI_AS NOT NULL ,
	CONSTRAINT [PK_prsites] PRIMARY KEY  CLUSTERED 
	(
		[id]
	)  ON [PRIMARY] 
) ON [PRIMARY]
GO


CREATE TABLE [product_prsites] (
	[product_id] [int] NOT NULL ,
	[prsite_id] [int] NOT NULL ,
	CONSTRAINT [PK_product_prsites] PRIMARY KEY  CLUSTERED 
	(
		[product_id],
		[prsite_id]
	)  ON [PRIMARY] ,
	CONSTRAINT [FK_product_prsites_prsites] FOREIGN KEY 
	(
		[prsite_id]
	) REFERENCES [prsites] (
		[id]
	) ON DELETE CASCADE 
) ON [PRIMARY]
GO

Запрос:
select name, prsite_id 
  from prsites, product_prsites 
  where product_id in (45560,123296) 
    and prsite_id = id 
  group by prsite_id, name 
  having count(product_id) = 2
16 сен 11, 12:12    [11286531]     Ответить | Цитировать Сообщить модератору
 Re: Получить общие строки из зависимой таблицы  [new]
Col
Member

Откуда: Торонто
Сообщений: 186
tigerxml,
Данные покажите, немогу уложить в одну постель Ваш первый пост и последний...

Этот скрипт аналог Вашего, но...

SELECT     prsites.name, product_prsites.prsite_id
FROM         product_prsites JOIN
                      prsites ON product_prsites.prsite_id = prsites.id
WHERE     (product_prsites.product_id = 45560) and
                      (product_prsites.product_id = 123296) 
16 сен 11, 16:41    [11289492]     Ответить | Цитировать Сообщить модератору
 Re: Получить общие строки из зависимой таблицы  [new]
tigerxml
Member

Откуда:
Сообщений: 5
Col
tigerxml,
Данные покажите, немогу уложить в одну постель Ваш первый пост и последний...

Этот скрипт аналог Вашего, но...

insert into prsites 1, 'Пер';
insert into prsites 2, 'Втр';

insert into product_prsites (45560, 1);
insert into product_prsites (123296, 2);
insert into product_prsites (123296, 1);
тогда этот запрос выдаст:
1 Пер.

(Писал текст вставки вручную)
SELECT     prsites.name, product_prsites.prsite_id
FROM         product_prsites JOIN
                      prsites ON product_prsites.prsite_id = prsites.id
WHERE     (product_prsites.product_id = 45560) and
                      (product_prsites.product_id = 123296) 

По поводу того что они не сходятся - первый пост писал вручную, т.к. не хотелось лесть в базу за кодом - передал просто суть.
19 сен 11, 20:14    [11301454]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить