我有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列获得正确的值:
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
谢谢!
答案 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
,那么 仍然有意义。
答案 1 :(得分:0)
将count(Coupon.CouponType_AutoID)
更改为count(CouponIssued.CouponType_AutoID)
,将count(Coupon.Coupon_AutoID)
更改为count(CouponUsed.Coupon_AutoID)