gpt4 book ai didi

mysql - 最有效的 MySQL 查询来获取订单中的所有项目 - 如果任何一个项目满足条件

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

从电子商务的角度来看,这几乎是一个经典的 SQL 查询。

我有一个名为 orders 的表,其中包含 orderid 和日期以及唯一的订单号,以及有关购买者的信息(只是另一个表的外键)等。

我还有一个名为 order_items 的表,其中包含商品 ID、金额、数量以及指向订单表的外键 (orders.orderid)

我想要做的是设计一个查询,对于具有特定类型项目的任何订单以及与该类别不匹配的其他项目,从订单返回 * 并从项目表返回 *。

例如:

Order 1 bought an apple, banana and daquiri
Order 2 bought a banana, cherry and envelope
Order 3 bought an apple, envelope and fig

如果订单包含苹果,我想返回订单表和商品表中的所有数据。所以在这种情况下:

order1    apple
order1 banana
order1 daquiri
order3 apple
order3 envelope
order3 fig

因为(显然)订单 1 和订单 3 中都有一个苹果。

假设我拥有所有正确的索引,我特别关心最有效的方法。

迄今为止我最好的镜头:

SELECT 
o.*, i.*
FROM items hasItem JOIN orders o ON hasItem.orderid=o.orderid AND hasItem.name='apple'
JOIN items i ON o.orderid=i.orderid
GROUP BY o.orderid, i.itemid

但我想避免使用GROUP BY,因为它看起来不太优雅。

最佳答案

尝试下面的方法。

SELECT o.*, i.*
FROM orders o
JOIN items i ON o.orderid=i.orderid
WHERE EXISTS (SELECT 1
FROM items
WHERE items.name = 'apple' AND o.orderid = items.orderid)
ORDER BY o.orderid, i.name

关于mysql - 最有效的 MySQL 查询来获取订单中的所有项目 - 如果任何一个项目满足条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34467120/

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