2009-09-23 13 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