我有一个表'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。我不确定我错过了什么。任何帮助将不胜感激。
答案 0 :(得分:4)
要获得与{2}和productID
相关的OptionId
,您可以编写类似的查询:
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
答案 1 :(得分: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
答案 2 :(得分:1)
SELECT DISTINCT ProductID FROM table WHERE OptionID IN(2,3);
答案 3 :(得分:0)
按列名使用distinct on(column-name)顺序。
select distinct on (column_name) require field order by that column name