你们认为这里最好的方法是什么? 我有大约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。不能使用任何其他东西。
我很想改变设计但不幸的是,30个脱节的表来自客户端的数据库,我们刚上传的基本csv平面文件。相同的邮政编码会出现在多个表格中,我们必须根据我们想要从中获取数据的表格进行插入。吮吸。我该如何解决这个问题?
答案 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