MS SQL - проблема выбора подмножества записей - PullRequest
3 голосов
/ 19 января 2011

У меня момент мозгового штурма SQL.Я пытаюсь получить набор записей, когда какой-либо из идентификаторов атрибутов для этого продукта имеет определенное значение.

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

Вот иллюстрация того, что я имею в виду: alt text

Есть ли способ сделать это?В настоящее время я делаю это

select product_id
from mytable
where product_attribute_id = 154

Но я, очевидно, получаю только одну запись:
alt text

Любая помощь будет принята с благодарностью.Мои навыки SQL немного просты.

РЕДАКТИРОВАТЬ

Есть одно условие, которое я забыл упомянуть.Есть моменты, когда мне нужно иметь возможность фильтрации по двум идентификаторам атрибутов.Например, в первом изображении выше нижний набор (идентификатор продукта 31039) имеет идентификатор атрибута 395. Мне нужно будет отфильтровать 154, 395. Результат не будет включать верхний набор (31046), который не имеет идентификатора атрибута.395.

Ответы [ 2 ]

4 голосов
/ 19 января 2011

Используя правильные объединения, вы можете вернуться к той же таблице

select B.*
from mytable A
-- retrieve B records from A record link
inner join mytable B on B.product_id = A.product_id
where A.product_attribute_id = 154  -- all the A records

РЕДАКТИРОВАТЬ: чтобы получить продукты, которые имеют 2 атрибута, вы можете присоединиться в другой раз

select C.*
from mytable A
-- retrieve B records from A record link
inner join mytable B on B.product_id = A.product_id
inner join mytable C on C.product_id = A.product_id
where A.product_attribute_id = 154  -- has attrib 1
  AND B.product_attribute_id = 313  -- has attrib 2
4 голосов
/ 19 января 2011

Я думаю, это то, что вы ищете:

SELECT * myTable where Product_Id IN (SELECT Product_Id FROM MyTable WHERE Product_AttributeID = @parameterValue)

На английском языке: Получите мне все записи, чтобы их идентификатор продукта был в наборе всех идентификаторов продукта, чтобы их идентификатор атрибута был равенв @ parameterValue.

РЕДАКТИРОВАТЬ:

SELECT * myTable where Product_Id IN (SELECT Product_Id FROM MyTable WHERE Product_AttributeID = @parameterValue1) AND Product_Id IN (SELECT Product_Id FROM MyTable WHERE Product_AttributeID = @parameterValue2)

Это должно сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...