表A =清晰度(uniqe ID = CaseID;包含CSN)
表B =调查(唯一ID = CSN)
表C = QA(唯一ID = caseID;包含CSN)
表D = FullData
目标:
“TableD”包含:
所有“TableC”,
与“表C”共有“CaseID”和“CSN”的所有“TableA”
与“表C”共有“CSN”的所有“TableB”
每晚都会重新制作表格。有很多人会对“表D”进行查询研究。我认为它需要是一个表而不是一个视图。
我打算使用:
Create TableD AS
Select *
From TableC
Left Join TableA
ON TableA.CaseID = TableC.CaseID AND TableA.CSN = TableC.CSN
Left Join TableB
ON TableC.CSN = TableC.CSN
我打算使用SQL Agent让脚本每晚都运行。这看起来太简单了。我必须放下前一天制作的桌子吗?有人看到错误吗?我正在使用Microsoft SQL Server。
答案 0 :(得分:0)
我假设你有一个SQL Server数据库。
表格方法可能具有优势,因为您说很多人会将其用于研究/报告目的。由于报告/研究的许多查询请求,您不希望陷入主应用程序表。最好有一个单独的报告表,以便您的主要应用程序表不受报告/研究目的的额外流量的影响。
如果要使用表方法,则可以使用以下脚本。我建议不要在*
中使用SELECT *
,因为您使用的表格中有重复的列,如CaseID
和CSN
;而是在表格中提及您想要的列列表。
IF Object_id(N'TableD', N'U') IS NULL
BEGIN
SELECT *
INTO tabled
FROM tablec
LEFT JOIN tablea
ON tablea.caseid = tablec.caseid
AND tablea.csn = tablec.csn
LEFT JOIN tableb
ON tablec.csn = tablec.csn;
END
ELSE
BEGIN
DELETE
FROM tabled;
INSERT INTO tabled
SELECT *
FROM tablec
LEFT JOIN tablea
ON tablea.caseid = tablec.caseid
AND tablea.csn = tablec.csn
LEFT JOIN tableb
ON tablec.csn = tablec.csn;
END