Почему этот запрос возвращает «неправильные» результаты? - PullRequest
1 голос
/ 05 ноября 2011

У меня есть 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

Спасибо!

Ответы [ 2 ]

1 голос
/ 05 ноября 2011
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 голосов
/ 05 ноября 2011

изменить count(Coupon.CouponType_AutoID) на count(CouponIssued.CouponType_AutoID) и count(Coupon.Coupon_AutoID) на count(CouponUsed.Coupon_AutoID)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...