Chr*_*her 3 sql-server join view duplicates sql-server-2008
每当我创建3个表的视图时,它都会复制所有行上的所有数据.我不知道如何连接这些,以便它显示空值而不是重复.你能直接指出我吗?
这是场景:
数据看起来像这样:
[Table 1= Accounts]
id name accountid
1 Family A account001
2 Family B account002
3 Family C account003
[Table 2= Properties]
id accountid description address
1 account001 home california
2 account001 beach mexico
3 account002 hideout arizona
4 account002 getaway nevada
5 account002 skilodge idaho
6 account 003 home texas
[Table 3= Vehicles]
id description make model accountid
1 green Acura Integra account001
2 blue Aston Martin Vantage account001
3 silver Audi Quattro account001
4 work Bently Continental GTC account002
5 kids Ford Fusion Hybrid account002
6 Mom's Car Land Rover LR4 account003
7 Paper Weight Mini Clubman account003
8 Beater Dodge Caliber account003
9 Why Mahindra TR40 account003
10 Kids Scion xB account003
Run Code Online (Sandbox Code Playgroud)
我的愿望是创建一个视图,向我显示数据库中的所有记录.对于每一行,我想显示帐户名称,然后显示表格中的数据.
我正在寻找视图返回如下所示的结果:如果该数据不是来自当前查询的列,它就不会在行上显示数据.
account_Name | property_DESCRIPTION | property_ADDRESS | vehicles_DESCRIPTION vehicles_MAKE | vehicles_MODEL
- Family A home california **null null null**
- Family A beach mexico **null null null**
- Family A **null null** blue Aston Martin Vantage
- Family A **null null** silver Audi Quattro
- Family B hideout arizona **null null null**
- Family B getaway nevada **null null null**
- Family B skilodge idaho **null null null**
- Family B **null null** kids Ford Fusion Hybrid
Run Code Online (Sandbox Code Playgroud)
但相反,它显示重复的数据,如下所示,每次找到新记录时,它会使用其他表中的数据填充行.
account_Name property_DESCRIPTION property_ADDRESS vehicles_DESCRIPTION vehicles_MAKE vehicles_MODEL
- Family A home california green Acura Integra
- Family A beach mexico green Acura Integra
- Family A home california blue Aston Martin Vantage
- Family A beach mexico blue Aston Martin Vantage
- Family A home california silver Audi Quattro
- Family A beach mexico silver Audi Quattro
- Family B hideout arizona work Bently Continental GTC
- Family B getaway nevada work Bently Continental GTC
- Family B skilodge idaho work Bently Continental GTC
- Family B hideout arizona kids Ford Fusion Hybrid
- Family B getaway nevada kids Ford Fusion Hybrid
- Family B skilodge idaho kids Ford Fusion Hybrid
Run Code Online (Sandbox Code Playgroud)
为什么这种情况似乎对我有意义; 一切都在加入.就好像连接一样,无论成本如何,他们都需要显示数据.从脚本的角度来看,似乎不是连接,而是需要单独循环遍历表,然后将生成的循环连接在一起.
本质上我需要视图首先显示表1中的所有记录,然后是表2中的所有记录,然后是表3中的所有记录.我真的不想将这些数据连接在一起; 我只想在一个视图中看到它.
任何人都可以告诉我如何生成上面显示空值而不是重复的所需视图?
这是在SQL 2008 R2 Enterprise上.
在这种情况下,您需要使用UNION(实际上是UNION ALL).
select a.name as account_Name,
p.description as property_DESCRIPTION,
p.address as property_ADDRESS,
null as vehicles_DESCRIPTION,
null as vehicles_MAKE,
null as vehicles_MODEL
from Accounts a
inner join Properties p
on a.accountid = p.accountid
UNION ALL
select a.name as account_Name,
null as property_DESCRIPTION,
null as property_ADDRESS,
v.description as vehicles_DESCRIPTION,
v.make as vehicles_MAKE,
v.model as vehicles_MODEL
from Accounts a
inner join vehicles v
on a.accountid = v.accountid
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13636 次 |
| 最近记录: |