2017-04-17 53 views
0

我正在研究咖啡店数据库并试图查找每件物品的销售数量。数字可以正确回来,但不是显示咖啡名称和销售量,而是显示所有咖啡名称与第一杯饮料的正确数据,然后显示所有咖啡名称与第二杯饮料的正确数据。SQL显示正确的数字,名称

select p.ProductName, TotalSold = SUM(o.Quantity) 
From MSProducts p, MSOrderline o 
Group By p.ProductName, o.ProductID 

enter image description here

输出应该是... 1 FlavoredSyrup单次11 2 ExtraExpresso 7 3.美式,小5

虽然它不适合继续在页面上数量在5以下。

+3

*从不*在'FROM'子句中使用逗号。 *总是*使用正确的,明确的'JOIN'语法。 –

+0

请显示示例表格数据,预期输出以及作为输出得到的内容。 – OldProgrammer

+0

你只能按1列分组,你有2列 –

回答

2

我认为缺乏连接条件是导致数据重复的原因。如果您在两个表中都有ProductID,这可能会有效。

select p.ProductName, SUM(o.Quantity) as TotalSold 
From MSProducts p 
inner join MSOrderline o 
on p.ProductID = o.ProductID 
Group By p.ProductName 
+0

工作起来,我们从未在课堂上学过内部联结。内部连接有没有办法解决? – DataStructors23

+0

你有没有在课堂上学习'where子句'? –

+0

@ DataStructors23不,你将一直在做内连接,左外连接或右外连接,或交叉连接。最好明确说明你想要的连接类型。当你使用逗号,但没有指定你加入的两个字段时,我认为你有一个交叉连接。 –

1

您需要正确映射两个表。

MSProducts p, MSOrderline o 

如果你不映射,那么第一个表的所有行将被映射到第二个表的所有行。请使用公共列映射它