2009-09-23 34 views
0

我有两个表中有很多记录(表1),第二个表(表2)有相似的数据但记录数少得多。在较大的表中检查大表中的数据

定期我需要添加一个标记到较大的表中的记录中,在较小的表中有相应的记录。例如,这可能是一个电子邮件地址。

因此,如果电子邮件地址在较小的表(表2)在较大的表纪念这个(表1)

存在现在,我知道这是一个有点含糊,但实际的数据心不是相关的,也不是表/列名称。即时通讯寻找的是想法/建议,因为这是最有效的方式。

我是否运行....

A)检查一个表中的记录,然后会在其他相应记录的程序?然后标记该记录是否匹配。哪个方法最好? B)用临时表做些什么?

c)有什么不同?请指点。

我希望这是有道理的,我希望你能帮上忙。

谢谢!

回答

6

执行包含电子邮件地址上两个表之间的INNER JOIN的UPDATE。

+0

好主意,但我不知道如何没有CJM的例子。谢谢;-) – Munklefish 2009-09-23 13:08:05

1

由于您使用的是SQL 2005,因此无法使用MERGE命令。您必须使用INSERT和UPDATE语句来执行此操作。

一旦您编写SQL来执行此操作,您可以创建一个SQL作业,该作业定期执行此语句并对其进行计划。

这里是如何安排的工作:http://msdn.microsoft.com/en-us/library/ms190268.aspx

+0

拉吉,谢谢你。我已经知道计划安排,它非常有用。 – Munklefish 2009-09-23 13:06:17

2

粗略地说,做这样的事情:

Update LargeTable 
Set Marker = 1 
From LargeTable l 
inner join SmallTable s 
on s.ID = l.ID 
Where s.SomeField = 'Criteria' 
+0

嗯!非常好的建议谢谢。看起来像一个非常有效的方法(从我有限的知识);-) – Munklefish 2009-09-23 13:06:54

+0

你应该符合你使用的别名,_UPDATE l SET l.Marker = 1 FROM LargeTable l INNER JOIN _.... – 2009-09-23 13:34:05

+0

@KM - 没有在SET语句中需要一个别名,因为它只能应用于UPDATE语句的目标。如果没有歧义,则不需要澄清。显然,你的建议没有坏处,但同样我个人认为没有好处。 – CJM 2009-09-23 15:02:08

1

为什么不创建一个触发器,当一个记录被放入该自动更新的第一个表,从第二张表中删​​除或更改。或者更好的是,当你想知道这些信息而不是第一次存储时,为什么不加入第二张表呢?

+0

经常有反例子化的情况(某种程度上或其他),但总的来说,我认为你提出了很好的观点。 – CJM 2009-09-23 15:02:45

+0

任何时候如此反规范化,您都需要设置一个触发器来确保数据保持同步。否则一张桌子会有陈旧的数据。 – HLGEM 2009-09-23 17:19:58

+0

任何一个表都可以随时更新,因此这个问题。任何建议如何触发将帮助将不胜感激。谢谢。 – Munklefish 2009-09-24 16:32:30