我有一个简单的问题,我想知道你是怎么做到的......
让我们说
Table 1 I have userId and name (1000 records)
Table 2 I have carId and name (90 records)
Table 3 I have userId, carId and value (820 records)
有一个简单的连接可以让我完成我想要的事情
select * from table3 A
inner join table1 B on A.userId=B.userId
inner join table2 C on A.carId=C.carId;
但是,如果用户没有拥有特定类型的汽车,则应将该值设置为0,而不是在计数中显示。
让事情变得简单
我有3(0-2)个用户和2(0-1)个汽车制造商, 我想要的数据可能是这样的,
从上述查询生成的当前数据:
0,1,200
1,0,100
1,1,100
虽然我希望它像这样(包括那些没有记录,但如果没有记录则将默认值设置为0)
id,car,val
0,0,0
0,1,200
1,0,100
1,1,100
2,0,0
2,1,0
谢谢
答案 0 :(得分:0)
试试这个:关键是使用左外连接,而不是内连接。内连接要求在两个连接表中都有一行。左连接只需要在指定的第一个(左侧)表中有一行。然后,您可以使用“coalesce”语句为空行显示0而不是null。
select
u.userId,
coalesce(c.carId, 0),
coalesce(uc.value, 0)
from
table1 u
left outer join table3 uc on u.userId = uc.userId
left outer join table2 c on uc.carId = c.carId