2

我有一个具有以下结构和值的表'optionsproducts'

ID      OptionID      ProductID
1       1             1
1       2             1
1       3             1
1       2             2
1       2             3
1       3             3

现在我想提取同时分配了 OptionID 2 和 OptionID 3 的 ProductID。这意味着在这种情况下应该返回 ProductID 1 和 3。我不确定我错过了什么。任何帮助将不胜感激。

4

4 回答 4

4

要获取productID与 2 和 3 相关OptionId的 s,您可以编写类似的查询:

select productid
  from ( select productid
              , optionid
              , dense_rank() over(partition by productid 
                                  order by optionid) as rn
           from t1
          where optionid in (2,3)
        ) s
where s.rn = 2

结果:

PRODUCTID
----------
1
3

SQLFiddle 演示

于 2013-08-28T09:19:49.073 回答
2

试试这个——

DECLARE @temp TABLE
(
      ID INT
    , OptionID INT
    , ProductID INT
)

INSERT INTO @temp (ID, OptionID, ProductID)
VALUES 
    (1, 1, 1),(1, 2, 1),
    (1, 3, 1),(1, 2, 2),
    (1, 2, 3),(1, 3, 3),(1, 3, 3)

SELECT ProductID
FROM @temp
WHERE OptionID IN (2,3)
GROUP BY ProductID
HAVING COUNT(*) > 1

输出 -

ProductID
-----------
1
3
于 2013-08-28T09:05:19.180 回答
1
SELECT DISTINCT ProductID FROM table WHERE OptionID IN(2,3);
于 2013-08-28T09:05:15.377 回答
0

使用 distinct on (column-name) order by column-name。

select distinct on (column_name) require field order by that column name
于 2013-08-28T09:05:35.917 回答