gpt4 book ai didi

php - 如何用MySQL过滤正确的订单(一个订单包含多行)

转载 作者:行者123 更新时间:2023-11-29 15:00:53 24 4
gpt4 key购买 nike

我必须过滤没有特定产品的订单。

很简单,但问题是每个订单可能有很多行,包含不同的产品。

这是我的数据示例:

ID | Product | Customer      | Quantidy | Date
1 | Apple | Alex Sorensen | 3 | 17.4.2009
2 | Orange | Alex Sorensen | 1 | 17.4.2009
3 | Lime | Alex Sorensen | 4 | 17.4.2009
4 | Apple | Fred Jonsson | 1 | 30.5.2010
5 | Lime | Fred Jonsson | 7 | 30.5.2010
ect...

具有相同日期和相同客户的行属于同一订单。

如何找到订单中没有(例如)Orange 的所有订单?

<小时/>

我自己的(不工作)MySQL 代码:

SELECT o.ID, k.Customer, o.Quantidy, p.Product, o.Date
FROM Products p, Orders o, Customers c
WHERE p.ID = o.ID
AND k.Customer = o.Customer
AND p.Product NOT IN ('Orange')
GROUP BY o.Date
ORDER BY o.ID DESC

问题是,即使我不想要“Alex Sorensen”的订单,因为它包含橙子,但我得到了他的其他行,但没有包含“Orange”的行。

我需要一个 SQL 代码来给我“Fred Jonsson”和其他订单,订单中没有橙子。

最佳答案

您应该能够使用NOT EXISTS:

SELECT o.ID, c.Customer, o.Quantity, p.Product, o.Date
FROM Products p, Orders o, Customers c
WHERE p.product = o.product
AND c.Customer = o.Customer
AND NOT EXISTS ( SELECT 1 FROM Orders o2
WHERE o2.product = 'Orange'
AND o2.customer = o.customer
AND o2.date = o.date
)
<小时/>

顺便尝试使用显式连接语法,一旦习惯了它将使阅读查询变得更容易:

SELECT o.ID, c.Customer, o.Quantity, p.Product, o.Date
FROM Orders o
JOIN Products p ON ( p.product = o.product )
JOIN Customers c ON ( c.Customer = o.Customer )
WHERE NOT EXISTS ( SELECT 1 FROM Orders o2
WHERE o2.product = 'Orange'
AND o2.customer = o.customer
AND o2.date = o.date
)

另一种方法是使用Left Join并检查NULL:

SELECT o.ID, c.Customer, o.Quantity, p.Product, o.Date
FROM Orders o
JOIN Products p ON ( p.product = o.product )
JOIN Customers c ON ( c.Customer = o.Customer )
LEFT JOIN Orders o2 ON ( o2.product = 'Orange'
AND o2.customer = o.customer
AND o2.date = o.date
)
WHERE o2.Id IS NULL

您必须尝试哪一个表现更好。

关于php - 如何用MySQL过滤正确的订单(一个订单包含多行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3131256/

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