首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >另一个涉及组合的复杂MySQL查询

另一个涉及组合的复杂MySQL查询
EN

Stack Overflow用户
提问于 2011-06-09 02:03:07
回答 1查看 256关注 0票数 1

假设我们有一个如下所示的表

代码语言:javascript
运行
复制
connection_requirements
+-----------------------------------+ 
| item_id | connector_id | quantity | 
+---------+--------------+----------+ 
| 1       | 4            | 1        | 
| 1       | 5            | 1        | 
| 1       | 2            | 2        | 
+---------+--------------+----------+ 

此表列出了电子设备运行所需的连接器,以及每种类型的连接器所需的数量。(想一想主板上的连接需要来自电源的某些类型的连接器)

现在我们还有这张表..。

代码语言:javascript
运行
复制
connections_compatability 
+-------------------------+ 
| connector_id | works_as | 
+--------------+----------+ 
| 6            | 4        | 
| 6            | 5        | 
+--------------+----------+ 

其中第一列是也可以充当第二列的连接器id的连接器。(例如,电源具有"6+2引脚“等连接器,可用作"8针”或"6针“)

现在,我们终于得到了此表中每个连接器的可用数量

代码语言:javascript
运行
复制
connector_quantities 
+-------------------------+ 
| connector_id | quantity | 
+--------------+----------+ 
| 1            | 1        | 
| 2            | 3        | 
| 3            | 2        | 
| 4            | 1        | 
| 5            | 0        | 
| 6            | 4        | 
| 7            | 0        | 
| 8            | 5        | 
+--------------+----------+ 

根据这些表,正如您可以推断的那样,我们确实有足够的连接器来满足项目编号1的正常操作。尽管我们没有足够的连接器#5,我们有4个连接器#6s,它可以作为连接器#4和#5工作。

connection_requirements表连接到items表,我们如何过滤需要比可用的连接更多的项?我们已经有了代码来过滤那些需要不可用连接器的项目。

这个问题有更多的复杂性,所以我们试图简化问题。

非常感谢大家的帮助!

EN

回答 1

Stack Overflow用户

发布于 2011-06-09 02:29:25

一种方法是确定物品的“真实”库存,包括它们的替代品。例如,part 4的实际库存实际上是5: 1-part #4 + 4-part #6。

代码语言:javascript
运行
复制
Select ...
From connection_requirements As CR
Where Not Exists    (
                    Select 1
                    From connector_quantities As Q1
                        Left Join   (
                                    Select C2.connector_id, C2.works_as, Q2.quantity
                                    From connections_compatibility As C2
                                        Join connector_quantities As Q2
                                            On Q2.connector_id = C2.connector_id
                                    ) As Subs1
                            On Subs1.works_as = Q1.connector_id
                    Where Q1.connector_id = CR.connector_id
                        And ( Coalesce(Subs1.quantity, 0) + Q1.quantity ) > CR.quantity
                    )

当然,这种方法有一个陷阱。假设你有一个项目,它的组成是:4 #4 connectors and 2 #6 connectors。从技术上讲,您确实有4 #4连接器(1 #4和3 #6替换),但结合2 #6连接器的要求,您没有足够的部件。要解决此问题,您可能必须使用循环或多个查询,这些查询将在您用完所有主要部件后确定现有库存。

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

https://stackoverflow.com/questions/6283200

复制
相关文章

相似问题

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