Sql server 创建检查多个表中数据的SQL视图
所以我有一个sql表,它将保存这样一个IDSql server 创建检查多个表中数据的SQL视图,sql-server,view,Sql Server,View,所以我有一个sql表,它将保存这样一个ID --------------------------------------------------- | RecordID | Date | Price -------------------------------------------------- | 1 | 8/31/2016 | 49 -------------------------------------------------- | 2 | 8/31/2016 | 101 -----
---------------------------------------------------
| RecordID | Date | Price
--------------------------------------------------
| 1 | 8/31/2016 | 49
--------------------------------------------------
| 2 | 8/31/2016 | 101
--------------------------------------------------
我还有另外3个表,它们将保存关于这个ID的信息,并且可以有不同数量的列
Table 1
---------------------------------------------------
| RecordID | Date | Price | Name
--------------------------------------------------
| 1 | 8/31/2016 | 50 | System
--------------------------------------------------
Table 2
---------------------------------------------------
| RecordID | Date | Price | Coupon
--------------------------------------------------
| 2 | 8/31/2016 | 100 | 7
--------------------------------------------------
但是ID在它们之间是分开的。这意味着表1可以有ID 1,然后表2可以有ID 2,依此类推。ID只能存在于三个表中的一个表中
因此,我的愿望是创建一个视图,在该视图中,我可以从原始表中获取ID和价格,并找到该ID存在于哪个表中,然后像这样很好地将其组合在一起
---------------------------------------------------
| RecordID | Date | Price1 | Price2
--------------------------------------------------
| 1 | 8/31/2016 | 49 | 50
--------------------------------------------------
| 2 | 8/31/2016 | 101 | 100
--------------------------------------------------
您可以使用
左侧外部联接
和合并
来执行此操作
假设您有一个名为tRecords
的主表和另外三个名为tInfo1
、tInfo2
和tInfo3
的表,它们都有RecordID
和Price
列:
SELECT
A.RecordID
,A.[Date]
,A.Price AS Price1
,COALESCE(B.Price,C.Price,D.Price) AS Price2
FROM
tRecords A
LEFT OUTER JOIN tInfo1 B
ON A.RecordID = B.RecordID
LEFT OUTER JOIN tInfo2 C
ON A.RecordID = C.RecordID
LEFT OUTER JOIN tInfo3 D
ON A.RecordID = D.RecordID
根据表中的数据类型,考虑创建一个视图来组合3个其他表的结果,以生成一个虚拟组合表:
create view vRecordCombo
select RecordId, Date, Price, Name as 'InfoString', NULL as 'InfoValue'
from table1
UNION ALL
select RecordId, Date, Price, NULL as 'InfoString', Coupon as 'InfoValue'
from table2
然后,您可以对组合进行连接,就好像它是一个包含所有记录的表一样