我从几个表中选择数据,但主要想法是产品可能有也可能没有与之相关的折扣记录,如折扣或美元折扣金额。我正在使用左外连接(这可能不正确),并且无论是否存在记录,都会返回相同的美元值和百分比值。左外部加入丢失的记录
查询看起来像:
SELECT Items.ItemID, Items.name, Items.price,
ItemDiscounts.percentOff, ItemDiscounts.dollarOff,
ItemAttributes.ColorName, ItemStuff.StuffID
FROM Items, ItemAttributes, ItemStuff
LEFT OUTER JOIN ItemDiscounts
ON ItemDiscounts.ItemID = ItemID
AND (
ItemDiscounts.percentOff > 0
OR ItemDiscounts.dollarOff > 0
)
WHERE Items.ItemID = ItemAttributes.ItemID
AND ItemStuff.ItemID = Items.ItemID
GROUP BY ItemStuff.StuffID
怪异的是,在所有的结果,percentOff
返回“1”,而dollarOff
返回“0”,不管每个项目都有它自己的相关折扣纪录。对于吐痰,我将ItemDiscounts.percentOff > 0
更改为ItemDiscounts.percentOff > 1
,然后将dollarAmount
更改为全部2,percentOff
全部为0。
我对此有些困惑,所以任何帮助将不胜感激。
是否存在GROUP BY '或任何聚合函数(SUM,COUNT ..)在这里没有显示? – Vatev 2012-07-24 18:37:37
有一个GROUP BY,是的,我嘲笑查询使它更短并且不暴露实际的表/列名,将编辑显示组 – 2012-07-24 18:39:51
试试选择GROUP_CONCAT(ItemDiscounts.dollarOff)而不是ItemDiscounts.dollarOff来查看GROUP BY是否隐藏其中任何一个 – Vatev 2012-07-24 18:46:47