SQL:从多个表中选择和插入的最佳方法
你们认为这里最好的方法是什么? 我有大约30个SQL表,基本上由[lookup]表引用。我必须为[lookup]表中的每一行插入另一个表[FinalTable]。现在[lookup]表看起来像这样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
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。不能用别的东西了
我很想改变设计,但不幸的是,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将出现在多个表中,我们必须根据我们应该从哪个表中获取数据来进行插入。