2011-11-05 3 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:

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)

Смежные вопросы