【发布时间】:2010-06-28 09:23:43
【问题描述】:
我必须过滤没有特定产品的订单。
这很简单,但问题是每个订单可能有很多行,包含不同的产品。
这是我的数据示例:
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...
具有相同date 和相同customer 的行表示相同的顺序。
如何找到所有订单中没有(例如)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”和其他订单中没有橙子的订单。
【问题讨论】:
-
我无法理解您的模型。你加入
productsp.id = o.id。这是否意味着您有一个Apple和id=1和另一个id=4? -
“p.ID = o.ID”是个错误,应该是“p.Product = o.Product”。我翻译并简化了其他语言的代码,这太糟糕了。
-
您的
p.Product = o.Product是否与您选择的p.Product相同(实际上是'Orange'还是Orange的ID)? -
是的,它们(p.Product = o.Product)是一样的。它是“橙色”的“id”