我必须过滤没有特定产品的订单。如何用MySQL过滤正确的订单(一个订单包含多行)
这很简单,但问题是,每个订单可能有很多行,包含不同的产品。
这是我的数据的一个示例:
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
的问题是,即使我不想“亚历克斯索伦森的”命令,因为它包含橘子,我得到他其他线路没有包含“橙色”的线路。
我需要一个SQL代码才能给我“Fred Jonsson”和其他订单,它们没有订单中的桔子。
我有麻烦理解你的模型。你在'p.id = o.id'上加入'products'。这是否意味着你有'id = 1'的苹果,另一个'id = 4'? – 2010-06-28 09:33:04
“p.ID = o.ID”是个错误,应该是“p.Product = o.Product”。我翻译并简化了其他语言的代码,这种方式非常糟糕。 – jsk 2010-06-28 10:04:43
你的'p.Product = o.Product'是你选择的相同的'p.Product'吗(它实际上是否说'Orange'或者它是'Orange'的ID吗? – 2010-06-28 10:36:25