MS SQL - 选择记录子集时出现问题

时间:2011-01-19 19:32:36

标签: sql sql-server coldfusion

我正在进行一次SQL大脑时刻。当该产品的任何属性ID是特定值时,我试图获取一组记录。

问题是,我需要获得同一产品的所有其他属性。

以下是我的意思: alt text

有办法吗?目前我在做这个

select product_id
from mytable
where product_attribute_id = 154

但我显然只得到单一记录:
alt text

非常感谢任何帮助。我的SQL技能有点基础。

修改

有一个条件我忘了提及。有时我需要能够过滤两个属性ID。例如,在上面的第一张图片中,下面的集合(产品ID 31039)具有属性ID 395.我需要在154,395上过滤。结果将不包括没有属性id的顶部集合(31046) 395.

2 个答案:

答案 0 :(得分:4)

我认为你正在寻找:

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

英文:获取所有记录,使其产品ID在所有产品ID的集合中,以使其属性ID等于@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)

应该这样做。

答案 1 :(得分:4)

使用正确的连接,您可以链接回同一个表

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