加入失败时显示0

时间:2019-07-20 01:05:20

标签: sql-server join

我正在使用SQL Server解决以下问题。

我有3个表T1,T2,T3

T1

ID    Name    Country
----------------------
 1     PR      IN
 2     AR      US

T2

 ID     AGE
------------
 1      32
 2      36
 3      40

T3

 ID     T1_ID    T2_ID   Amount
--------------------------------
 1       1         1       100
 2       1         2       300

必填输出

T1.Name     T2.Age     T3.Amount
---------------------------------
 PR            32        100
 PR            36        200
 PR            40         0

我的查询是:

select 
    T1.name, T2.Age, T3.amount 
from 
    T3 
join 
    T1 on T1.id = T3.T1_ID --fixed a typo here
right join 
    T2 on T2.id =  T3.T2_ID
where 
    T1.id = 1

我当前的输出是:

    T1.Name     T2.Age     T3.Amount
    --------------------------------
      PR         32        100
      PR         36        200

在此方面,我将不胜感激

1 个答案:

答案 0 :(得分:1)

在T2和T1上启动 FROM 语句,因为您希望T2和T1的所有记录都作为笛卡尔积,受WHERE限制

代替在 FROM 中加入T3,对T3使用 subselect 可以使您使用 ISNULL

SELECT T1.NAME, 
       T2.age, 
       ISNULL((SELECT amount 
               FROM   T3 
               WHERE  T1.id = T3.T1_id 
                      AND T2.id = T3.T2_id), 0) AS Amount 
FROM   T2 CROSS JOIN 
       T1
WHERE  T1.id = 1