处理结果集以查找外键(并填充新表!)

时间:2010-05-18 05:23:01

标签: sql-server sql-server-2005

我已经交了一个数据集,它有一些相当基本的表结构,根本没有键。例如

{myRubishTable} - Area(varchar),AuthorityName(varchar),StartYear(varchar),StartMonth(varcha),EndYear(varchar),EndMonth(varchar),Amount(Money)

还有其他表使用Area和AuthorityName列以及Month和Years的一般用法,所以我认为第一步是将Area和Authority拉入自己的表中。

我现在想要处理原始表中的数据并查找键值以使用外键放入我的新表中,如下所示。

(lookup Tables)
{Area} - id (int, PK), name (varchar(50))
{AuthorityName} - id(int, PK), name(varchar(50)

(TargetTable)
{myBetterTable} - id (int,PK), area_id(int FK-Area),authority_name_id(int FK-AuthorityName),StartYear (varchar),StartMonth(varchar),EndYear(varchar),EndMonth(varchar),Amount(money)

所以旧表中的第一行读

MYAREA, MYAUTHORITY,2009,Jan,2010,Feb,10000

我希望用

填充新表
1,1,1,2009,Jan,2010,Feb,10000

其中第一个'1'是主键,后两个'1'是查找表中的ID。

有人能指出我使用SQL实现这一目标的最有效方法吗?

脚注: - 我已经通过一些非常简单的WHERE子句实现了我所需要的(我在FROM中留下了一个流氓表名,它抛出了我:o()但是有兴趣知道这是否是最有效的。

SELECT   [area].[area_id],
         [authority].[authority_name_id],
         [myRubishTable].[StartYear],
         [myRubishTable].[StartMonth],
         [myRubishTable].[EndYear],
         [myRubishTable].[EndMonth],
         [myRubishTable].[Amount]
FROM     [myRubishTable],[Area],[AuthorityName]
WHERE   [myRubishTable].[Area]=[Area].[name]
AND      [myRubishTable].[Authority Name]=[dim_AuthorityName].[name]

1 个答案:

答案 0 :(得分:1)

按照脚注,除了替换

的语法
FROM X, Y, Z
WHERE X.a = Y.a AND X.b = Z.b

使用等效但更具惯用性的

SQL
FROM
   X
   INNER JOIN Y ON X.a = Y.a
   INNER JOIN Z ON Z.b = Z.b

我认为没有太多要补充的内容。对于只能运行一次的东西(对吗?),效率不应该是你最关心的问题 - 正确性应该是。除非您有这么多数据或这样这是一种效率低下的方法,实际上它确实需要太长时间,当然......