加入 3 tables INTO 1 new table

Join 3 tables INTO 1 new table

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

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

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

Table D = 全数据

目标:

“TableD”包含:

全部“TableC”,

所有“TableA”与“Table C”有共同的“CaseID”和“CSN”

所有与“Table C”有共同“CSN”的“TableB”

Table 每天晚上重制。有很多人将对“Table D”进行查询研究。我认为它需要是 table 而不是视图。

我打算使用:

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代理制作脚本运行。这似乎太简单了。我必须删除前一天制作的 table 吗?有人看到错误吗?我正在使用 Microsoft SQL 服务器。

我假设您有一个 SQL 服务器数据库。

table 方法可能有优势,因为您说过很多人会出于 research/report 目的使用它。您不希望由于 reporting/research 的许多查询请求而使您的主应用程序 table 停滞不前。最好有一个单独的报告 table,这样您的主应用程序 table 就不会因为 reporting/research 目的而受到额外流量的影响。

如果您想使用table 方法,则可以使用以下脚本。我建议不要在 SELECT * 中使用 *,因为您使用的 table 中有重复的列,例如 CaseIDCSN;而是在 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