SQL:从多个表中选择和插入的最佳方法

SQL:从多个表中选择和插入的最佳方法,sql,sql-server,sql-server-2005,tsql,Sql,Sql Server,Sql Server 2005,Tsql,你们认为这里最好的方法是什么? 我有大约30个SQL表,基本上由[lookup]表引用。我必须为[lookup]表中的每一行插入另一个表[FinalTable]。现在[lookup]表看起来像这样 ID, Zipcode, tableID 1, 60453, 1 2, 90210, 1 3, 60453, 2 4, 60625, 3 5, 60625, 4 6, 60625, 4 7, 60625, 5 有一个tableID,可以让我知道我需要从30

你们认为这里最好的方法是什么? 我有大约30个SQL表,基本上由[lookup]表引用。我必须为[lookup]表中的每一行插入另一个表[FinalTable]。现在[lookup]表看起来像这样

ID, Zipcode, tableID 
1,  60453,   1
2,  90210,   1
3,  60453,   2
4,  60625,   3
5,  60625,   4
6,  60625,   4
7,  60625,   5
有一个tableID,可以让我知道我需要从30个表中获取数据。然后使用zipcode在表上进行选择并插入返回的任何数据集

使用光标遍历[lookup]表的每一行,这里的最佳方法是什么?在效率和最快的查询方面。如何在SQL语句中动态地进行表选择?[lookup]表大约有1k行数据,将来不会有太大的增长。但整个选择和插入过程需要每月重复一次。让我知道你们的想法。谢谢

到目前为止我所有的方法。不幸的是,我只能使用SQL。不能用别的东西了

  • 是否将所有内容都放在if-else语句中以选择不同的表和插入
  • 使用case-switch语句
  • 为每个表写入30个存储过程
    我很想改变设计,但不幸的是,30个不连贯的表来自客户的DB,我们刚刚上传的基本csv平面文件。相同的zipcodes将出现在多个表中,我们必须根据我们应该从哪个表中获取数据来进行插入。烂透了。如何修复此问题?

    鉴于此数据库设计,我将编写30个查询,每个表一个查询,例如:

    SELECT ...
    FROM lookup l JOIN table15 t ON l.zipcode = t.zipcode
    WHERE l.tableID = 15
    
    对于其他30个表中的每一个表也是如此。这可能是最简单、最可维护的解决方案,也可能具有最好的性能。并非所有任务都需要在单个查询中完成


    我同意@ HLGEM的评论,你应该考虑重新设计,这样你就没有30个单独的表了。此设计闻起来像。

    鉴于此数据库设计,我将编写30个查询,每个表一个查询,例如:

    SELECT ...
    FROM lookup l JOIN table15 t ON l.zipcode = t.zipcode
    WHERE l.tableID = 15
    
    对于其他30个表中的每一个表也是如此。这可能是最简单、最可维护的解决方案,也可能具有最好的性能。并非所有任务都需要在单个查询中完成


    我同意@ HLGEM的评论,你应该考虑重新设计,这样你就没有30个单独的表了。这个设计闻起来像是。

    我完全同意@HLGEM的评论。你在路上遇到了问题

    然而,她的SQL语句可能会起作用

    INSERT INTO [FinalTable] ({list of columns for [FinalTable]}
    SELECT {List of columns for [FinalTable]}
    FROM [lookup]
    LEFT OUTER JOIN [Table1] ON [lookup].[Zipcode] = [Table1].[Zipcode] AND [lookup].[tableID] = 1
    LEFT OUTER JOIN [Table2] ON [lookup].[Zipcode] = [Table2].[Zipcode] AND [lookup].[tableID] = 2
    LEFT OUTER JOIN [Table3] ON [lookup].[Zipcode] = [Table3].[Zipcode] AND [lookup].[tableID] = 3
    LEFT OUTER JOIN [Table4] ON [lookup].[Zipcode] = [Table4].[Zipcode] AND [lookup].[tableID] = 4
    LEFT OUTER JOIN [Table5] ON [lookup].[Zipcode] = [Table5].[Zipcode] AND [lookup].[tableID] = 5
    
    -- LEFT OUTER JOIN other tables
    
    LEFT OUTER JOIN [Table30] ON [lookup].[Zipcode] = [Table30].[Zipcode] AND [lookup].[tableID] = 30
    

    我完全同意@HLGEM的评论。你在路上遇到了问题

    然而,她的SQL语句可能会起作用

    INSERT INTO [FinalTable] ({list of columns for [FinalTable]}
    SELECT {List of columns for [FinalTable]}
    FROM [lookup]
    LEFT OUTER JOIN [Table1] ON [lookup].[Zipcode] = [Table1].[Zipcode] AND [lookup].[tableID] = 1
    LEFT OUTER JOIN [Table2] ON [lookup].[Zipcode] = [Table2].[Zipcode] AND [lookup].[tableID] = 2
    LEFT OUTER JOIN [Table3] ON [lookup].[Zipcode] = [Table3].[Zipcode] AND [lookup].[tableID] = 3
    LEFT OUTER JOIN [Table4] ON [lookup].[Zipcode] = [Table4].[Zipcode] AND [lookup].[tableID] = 4
    LEFT OUTER JOIN [Table5] ON [lookup].[Zipcode] = [Table5].[Zipcode] AND [lookup].[tableID] = 5
    
    -- LEFT OUTER JOIN other tables
    
    LEFT OUTER JOIN [Table30] ON [lookup].[Zipcode] = [Table30].[Zipcode] AND [lookup].[tableID] = 30
    

    就我个人而言,我现在会改变设计,但随着时间的推移,这不是一个很好的设计。我很想改变设计,但不幸的是,30个不连贯的表来自客户的DB,我们刚刚上传的基本csv平面文件。相同的zipcodes会出现在多个表中,我们必须根据我们应该从哪个表中获取数据来进行插入。就我个人而言,我现在会更改设计,但随着时间的推移,这不是一个很好的设计。我很想更改设计,但不幸的是,30个不连贯的表来自客户的数据库,我们刚刚上传的基本csv平面文件。相同的zipcodes将出现在多个表中,我们必须根据我们应该从哪个表中获取数据来进行插入。