我的数据库中有2个表:
DetectorStatus
DetectorStatusID DetectorID DateTime DetectorModeID Status
1 471 time 2 0.7
StationStatus
StationStatusID DetectorID DateTime StationModeID Status
1 1541 time 2 0.74
我想创建一个如下所示的视图:
StationStatusID DetectorStatusID DetectorID DateTime StationModeID DetectorModeID Status
NULL 1 471 time NULL 2 0.7
1 NULL 1541 time 2 NULL 0.74
现在,当我创建这样的视图时:
CREATE view statusoverview AS
SELECT * FROM [GMS_MAN].[dbo].[DetectorStatus]
UNION ALL
SELECT * FROM [GMS_MAN].[dbo].[StationStatus]
我在1个表中得到了所有结果。但 StationModeID 位于 DetectorModeID 等内。
如何创建看起来像给定示例的视图?
答案 0 :(得分:1)
您需要确保两个结果集都包含您想要的所有列:
CREATE view statusoverview AS
SELECT null as StationStatusID,
DetectorStatusID,
DetectorID,
DateTime,
null as StationModeID,
DetectorModeID,
Status
FROM [GMS_MAN].[dbo].[DetectorStatus]
UNION ALL
SELECT StationStatusID,
null,
DetectorID,
DateTime,
StationModeID,
null,
Status
FROM [GMS_MAN].[dbo].[StationStatus]
请注意,列名取自第一个查询,因此需要命名所有列。第二个可以省略命名为它提供null
的列。
答案 1 :(得分:1)
SELECT null as StationStatusID,DetectorStatusID,DetectorID,DateTime,null StationModeID,DetectorModeID,Status FROM [GMS_MAN].[dbo].[DetectorStatus]
UNION ALL
SELECT StationStatusID, null, DetectorID,DateTime,StationModeID, null ,Status FROM [GMS_MAN].[dbo].[StationStatus]
我可能会做一些列拼写错误,但它会像那样
答案 2 :(得分:0)
好吧,你不会使用SELECT *,你将指定你想在表中使用哪些列:
CREATE view statusoverview AS
SELECT detector.*, station.StationStatusID, station.StationMode,station.Status
FROM DetectorStatus detector
LEFT JOIN StationStatus station ON station.DetectorID=detector.DetectorID.
无论你选择什么,我认为你不应该“选择*,而是指明你需要的东西”