加入3个表INTO 1个新表

时间:2016-01-08 21:15:24

标签: sql join create-table select-into

表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。

1 个答案:

答案 0 :(得分:0)

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

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

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

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