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

时间:2010-07-20 17:16:56

标签: 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个表中的哪一个。然后使用zipcode我在该表上选择并插入任何返回的数据集

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

到目前为止我所有的方法。不幸的是,我只有我自己的SQL。不能使用任何其他东西。

  1. 将所有内容放在if-else语句中以选择不同的表和插入?
  2. 使用case switch语句?
  3. 为每个表写入30个存储过程?
  4. 我很想改变设计但不幸的是,30个脱节的表来自客户端的数据库,我们刚上传的基本csv平面文件。相同的邮政编码会出现在多个表格中,我们必须根据我们想要从中获取数据的表格进行插入。吮吸。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

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

SELECT ...
FROM lookup l JOIN table15 t ON l.zipcode = t.zipcode
WHERE l.tableID = 15

同样对于其他30个表中的每一个。这可能是最简单,最易维护的解决方案,也可能具有最佳性能。并非每项任务都需要在一次查询中完成。

我同意@ HLGEM的评论,你应该考虑重新设计这个,所以你没有30个单独的表。这种设计闻起来像Metadata Tribbles antipattern

答案 1 :(得分:0)

我完全赞同@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