Sql server 加入不成功时显示0
我正在使用SQL Server解决以下问题 我有三张桌子T1,T2,T3 T1:Sql server 加入不成功时显示0,sql-server,join,Sql Server,Join,我正在使用SQL Server解决以下问题 我有三张桌子T1,T2,T3 T1: ID Name Country ---------------------- 1 PR IN 2 AR US ID AGE ------------ 1 32 2 36 3 40 ID T1_ID T2_ID Amount -------------------------------- 1
ID Name Country
----------------------
1 PR IN
2 AR US
ID AGE
------------
1 32
2 36
3 40
ID T1_ID T2_ID Amount
--------------------------------
1 1 1 100
2 1 2 300
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
T2:
ID Name Country
----------------------
1 PR IN
2 AR US
ID AGE
------------
1 32
2 36
3 40
ID T1_ID T2_ID Amount
--------------------------------
1 1 1 100
2 1 2 300
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
T3:
ID Name Country
----------------------
1 PR IN
2 AR US
ID AGE
------------
1 32
2 36
3 40
ID T1_ID T2_ID Amount
--------------------------------
1 1 1 100
2 1 2 300
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
所需输出
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
我非常感谢您在这方面提供的任何帮助,因为您希望T2和T1的所有记录都是笛卡尔积,并且受到位置的限制 使用T3的子选择,而不是将T3加入来自的,允许您使用ISNULL:
ID Name Country
----------------------
1 PR IN
2 AR US
ID AGE
------------
1 32
2 36
3 40
ID T1_ID T2_ID Amount
--------------------------------
1 1 1 100
2 1 2 300
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
您的
where
子句不允许空值,因此联接变成internal
而不是right
。即使删除where子句,我也无法获得所需的输出您确定这是您所需的输出吗?从你所展示的数据来看,对于第三排来说,这是不可能的,我不认为你的名字是PR,因为PR的ID是1。此外,它应该是唯一的年龄填充我假设金额和名称应为空,如果你想第三行,即使它有空的名称和金额,只有年龄显示我同意它。您能帮我了解一下语法吗?在ANSI-92 SQL标准中(25多年前),旧样式的逗号分隔表样式被正确的ANSIJOIN
语法所取代,不鼓励使用它。如果你真的想要一个笛卡尔积,使用交叉连接谢谢,marc_s,更明确一点,不要用逗号