gpt4 book ai didi

mysql - 独家mysql select查询,两张表

转载 作者:行者123 更新时间:2023-11-29 14:30:02 25 4
gpt4 key购买 nike

我有以下表格(它们都有更多列,但我只显示感兴趣的列):

Product                         Order details                   Orders
---------------------------- ---------------------------- --------------
| id_product | id_supplier | | id_order | id_product | | id_order |
| 12 | 2 | | 1 | 56 | | 1 |
| 32 | 4 | | 2 | 32 | | 2 |
| 56 | 2 | | 2 | 56 | | 3 |
| 10 | 1 | | 4 | 56 | | 4 |
---------------------------- | 3 | 12 | --------------
----------------------------

我想要做的是选择包含一个或多个供应商的产品的所有订单。假设我想要所有只有 id 为 2 (id_supplier = 2) 的供应商提供的产品的订单,我应该获得 id 为 1、3 和 4 的订单。

如果我希望所有订单包含 ID 为 4 (id_supplier = 4) 的供应商的产品,我应该得到一个空结果。

如果我想要所有订单包含 ID 为 2 4 的供应商的产品,我应该获得 ID 为 2 的订单。

我已阅读以下问题:mySQL exclusive records但是当我有两个像我一样的表时,我无法掌握该查询的工作原理。我只需要另一双眼睛来帮助我! :)

你知道我该怎么做吗?

编辑:澄清一下,我想获取仅包含一个或多个指定供应商的产品的所有订单。不应包含来自指定供应商以外的其他供应商的产品的订单。

最佳答案

根据我列出的问题,我认为这就是您想要的,并且可以通过 LEFT join 来完成。

select 
od.id_order,
sum( if( p.id_supplier in ( 2, 4 ), 1, 0 )) as HasSupplierLookingFor,
sum( if( p.id_supplier in ( 2, 4 ), 0, 1 )) as HasOtherSuppliers
from
order_Details od
join product p
on od.id_product = p.id_product
group by
od.id_order
having
HasSupplierLookingFor > 0
AND HasOtherSuppliers = 0

有时,仅仅回答一个可能有些模棱两可的问题会导致答案被歪曲。此查询将以每个订单为基础,加入产品以查找供应商并按订单 ID 进行分组。

对于每个订购的产品,第一个 SUM() 询问是否是您正在寻找的供应商之一,如果是,则求和值为 1,否则为 0...下一个 SUM() 询问相同的事情.. .但如果是供应商,则使用零,因此所有其他供应商都会获得 1。

因此,现在,HAVING 子句正在寻找至少有 1 个供应商符合资格且没有其他供应商代表的任何订单。

因此,您的订单可能包含 30 件商品,其中 20 件来自供应商 2,10 件来自供应商 4。HasSupplierLookingFor = 30,HasOtherSuppliers = 0,该订单将包含在内。

另一个订单可能有 5 件商品。一个来自供应商 2,另外 4 个来自供应商 9。这将使 HasSupplierLookingFor = 1,并且 HasOtherSuppliers = 4,因此将此排除为合格订单。

关于mysql - 独家mysql select查询,两张表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10176264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com