-2

表 A = Clarity(唯一 ID = CaseID;包含 CSN)

表 B = 调查(唯一 ID = CSN)

表 C = QA(唯一 ID = caseID;包含 CSN)

表 D = 完整数据

目标:

“TableD”包含:

所有“表C”,

与“表 C”有共同的“CaseID”和“CSN”的所有“表A”</p>

与“表 C”有共同“CSN”的所有“表 B”</p>

每天晚上都会重新制作餐桌。有很多人会在“表 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。

4

1 回答 1

0

我假设您有一个 SQL Server 数据库。

表格方法可能有一个优势,因为您说过很多人会将其用于研究/报告目的。您不希望由于报告/研究的许多查询请求而使您的主要应用程序表陷入困境。最好有一个单独的报告表,这样您的主要应用程序表就不会受到用于报告/研究目的的额外流量的影响。

如果您想使用表格方法,则可以使用以下脚本。我建议不要使用*in ,SELECT *因为您使用的表中有重复的列,CaseID例如CSN; 而是在 tableD 中提及您想要的列列表。

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
于 2016-01-08T21:43:17.867 回答