首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从组合中获得产品

从组合中获得产品
EN

Stack Overflow用户
提问于 2015-03-31 03:54:42
回答 1查看 106关注 0票数 2

考虑下表的产品

假设用户需要输入组件的组合才能获得产品。如果用户输入、冰、,系统将只显示冰茶,而不显示冰奶茶(或其他可能以冰为成分的产品)。如果用户只输入冰作为组件,它将只显示冰作为产品。如果用户只输入巧克力,则不需要返回结果,因为组件的组合并不是产品的组合,也不存在以巧克力为唯一组件的其他产品。

组件的产品和组合是独特的。不存在具有相同组件的其他产品。意味着冰、茶和牛奶只会产生冰红茶。

为了得到我想要的结果,我有点被困在来查询(MSSQL)中。我可以看到组合和流程,但不知道确切的查询使用。

有人能建议/指出正确的方向吗?

谢谢你们的关注。()

添加:表模式

从产品中选择*

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-31 04:27:44

这是一个无余数关系除法(RDNR)问题。看看这个由Dwain阵营提供的article,它为这类问题提供了许多解决方案。

您还需要一个字符串拆分器来拆分逗号分隔的组件变量。以下是Jeff的DelimitedSplit8K函数。

代码语言:javascript
复制
DECLARE @components VARCHAR(100) = 'ice,tea';
DECLARE @component TABLE(Component VARCHAR(100));

INSERT INTO @component
    SELECT Item
    FROM dbo.DelimitedSplit8K(@components, ',')


SELECT
    t.Product
FROM(
    SELECT Product, CNT = COUNT(*)
    FROM Product
    GROUP BY Product
)t
INNER JOIN(
    SELECT CNT = COUNT(*) FROM @Component
)s
    ON s.CNT = t.CNT
INNER JOIN Product p 
    ON p.Product = t.Product
INNER JOIN @component c
    ON c.Component = p.Component
GROUP BY t.Product
HAVING COUNT(*) = MIN(s.CNT)

SQL Fiddle

@,这里有一个简单得多的方法:

代码语言:javascript
复制
SELECT
    p.Product
FROM Product p
WHERE p.Component IN('Ice','Tea')
GROUP BY p.Product
HAVING
    COUNT(Component) = 2
    AND COUNT(Component) = (SELECT COUNT(*) FROM Product WHERE Product = p.Product)

SQL Fiddle

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29360332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档