日期:2014-05-17  浏览次数:20468 次

HELP!这个SQL怎么写?
有3个表,如下:
Goods make MakeItems Stock

GdsID:'0005 ' makeID:1 MakeID:1 BaseID:1
GdsName:'手机' Date:2008-12-01 GdsID:'0005 ' GdsID:'0005'
.... ... UseQua:100 StockQua:100
   
  makeID:2 makeID:2 BaseID:2
  Date:2008-12-02 GdsID:'0005' GdsID:'0005'
  ... UseQua:50 StockQua:0
省略表示有其他字段
我的SQL如下:
SELECT Sum(makeItems.UseQua),Sum(Stock.StockQua)
FROM MakeItems INNER JOIN make ON makeItems.makeID=make.MakeID
  INNER JOIN Goods ON MakeItems.GdsID=Goods.GdsID INNER JOIN
  Stock ON Stock.GdsID=Goods.GoodsID
WHERE Make.Date Between '2008-12-01' AND '008-12-02' AND Goods.GdsID='0005'

查询出来的汇总结果不对,我调试后发现有UseQua和StockQua都查了两次,各位老大帮帮我啊?


------解决方案--------------------
你的inner join里面有1對多的情況
將inner join的條件寫全 應該可以
或者用
select sum(UseQua),sum(StockQua)
from
(
SELECT disitnct(makeItems.UseQua),(Stock.StockQua) 
FROM MakeItems INNER JOIN make ON makeItems.makeID=make.MakeID 
INNER JOIN Goods ON MakeItems.GdsID=Goods.GdsID INNER JOIN 
Stock ON Stock.GdsID=Goods.GoodsID 
WHERE Make.Date Between '2008-12-01' AND '008-12-02' AND Goods.GdsID='0005' 
)a
看看
------解决方案--------------------
你把三个表的结构,和相关关系说说,然后要的结果是什么?
------解决方案--------------------
好乱的3(4)个表
------解决方案--------------------
上面的语法没有问题,
如果你要分组统计,后面要加group by加上分组统计的字段
------解决方案--------------------
看了看,建议你先弄清楚这三表的字段连接是否会出现迪卡尔-积?
------解决方案--------------------
问问题前,除了是找那种语句中的错误的问题, 最好不要贴自己写的逻辑乱七八早的语句,而是把需求描述和希望得到的结果贴出来。

你语句逻辑不对,你又说取得不是你想要的值,别人根本不知道你想要什么。
------解决方案--------------------
很大可能应该是表关联的时候出现重复值,建议减少表试下
最好能把表结构和相互关系贴出来

------解决方案--------------------
SQL code
SELECT Sum(makeItems.UseQua),Sum(Stock.StockQua) 
FROM MakeItems INNER JOIN make ON makeItems.makeID=make.MakeID 
    INNER JOIN Goods ON MakeItems.GdsID=Goods.GdsID  INNER JOIN 
    Stock ON Stock.GdsID=Goods.GoodsID 
WHERE Make.Date Between '2008-12-01' AND '008-12-02' AND Goods.GdsID='0005' 
[color=#FF0000]group by …… 进行分组[/color]

------解决方案--------------------
探讨
你把三个表的结构,和相关关系说说,然后要的结果是什么?

------解决方案--------------------
探讨
引用:
问问题前,除了是找那种语句中的错误的问题, 最好不要贴自己写的逻辑乱七八早的语句,而是把需求描述和希望得到的结果贴出来。

你语句逻辑不对,你又说取得不是你想要的值,别人根本不知道你想要什么。


你看清楚了先,不是我要的结果,是因为查询的数据有误,此外,语句有问题嘛?

------解决方案--------------------
UP
------解决方案--------------------
你运行下面的语句,查看一下结果集,就知道为什么聚合的数值不对了。
也许你需要加上group by子句,来指定按什么字段聚合。
SQL code

SELECT *
FROM MakeItems 
INNER JOIN make ON makeItems.makeID=make.MakeID 
INNER JOIN Goods ON MakeItems.GdsID=Goods.GdsID  
INNER JOIN Stock ON Stock.GdsID=Goods.GoodsID 
WHERE Make.Date Between '2008-12-01' AND '008-12-02' AND Goods.GdsID='0005'