2011-11-05 189 views
1

我有3個表:爲什麼此查詢返回「不正確」的結果?

'CouponType' 表:

AutoID   Code  Name 

    1   CouT001  SunCoupon  
    2   CouT002  GdFriCoupon  
    3   CouT003  1for1Coupon 

'CouponIssued' 表:

AutoID    CouponNo  CouponType_AutoID 

    1     Co001    1 
    2     Co002    1 
    3     Co003    1     
    4     Co004    2 
    5     Co005    2 
    6     Co006    2  

'CouponUsed' 表:

AutoID  Coupon_AutoID 

    1    2 
    2    3 
    3    5 

我想使用下面的查詢將3個表連接在一起,但顯然我沒有得到正確答案對於CouponIssued塔T值:

select CouponType.AutoID, Code, Name, Count(CouponIssued.CouponType_AutoID), count(CouponUsed.Coupon_AutoID) 
from (CouponType left join CouponIssued 
on (CouponType.AutoID = CouponIssued.CouponType_AutoID)) 
left join CouponUsed 
on (couponUsed.Coupon_AutoID = CouponIssued.AutoID) 
group by CouponType.AutoID, code, name 
order by code 

預期的結果應該是這樣的:

**Auto ID   Code   Name    Issued   used** 

1     CouT001  SunCoupon   3     2 

2     CouT002  GdFriCoupon   3     1 

3     CouT003  1for1Coupon   0     0 

謝謝!

回答

1
SELECT t.AutoID 
     ,t.Code 
     ,t.Name 
     ,count(i.CouponType_AutoID) AS issued 
     ,count(u.Coupon_AutoID) AS used 
FROM CouponType t 
LEFT JOIN CouponIssued i ON i.CouponType_AutoID = t.AutoID 
LEFT JOIN CouponUsed u ON u.Coupon_AutoID = i.AutoID 
GROUP BY 1,2,3; 

您可以考慮使用較少的混淆名稱爲您的表列。我已經在跨表格使用相同數據的同名做了很好的經驗(儘可能合理)。

在您的示例中,AutoID用於三個不同的列,其中兩個用另一個表名在另一個表中出現。如果Coupon_AutoID改爲CouponIssued_AutoID,則仍然有意義。

0

變化count(Coupon.CouponType_AutoID)count(CouponIssued.CouponType_AutoID)count(Coupon.Coupon_AutoID)count(CouponUsed.Coupon_AutoID)

相關問題