2009-10-22 480 views
0

我有表,我將記錄插入到另一個表。 標記記錄插入的最佳方式是什麼,所以它不會被嘗試再次插入?標記記錄插入

+2

示例代碼表示讚賞;) – Ossi 2009-10-22 14:03:16

回答

2

你可以看到像這樣的兩個表之間的差異:從tableFoo

SELECT *
LEFT JOIN tableBar ON tableFoo.commonColumn = tableBar.commonColumn
WHERE tableBar.commonColumn IS NULL

這個想法是,兩個表都有一個要匹配的列,當列爲空時加入的記錄是僅存在於tableBar中的記錄。

這個工作原因是因爲即使其中一個表具有空值,左連接也會返回記錄,這與內連接不同,後者的做法相反。

獲得這些記錄後,您可以根據返回的ID插入。

+0

我還沒有共同的列,我可以嘗試添加一個,如何結合2列kkep它獨特(其中一個將是時間戳)這將是可能的嗎? – Ossi 2009-10-22 14:21:50

+0

這兩個表都應該有唯一的列,如ID。您可以加入該專欄。 – 2009-10-22 14:23:11

+0

如果您不明白,請隨時提出更多問題:]並感謝接受! – 2009-10-22 14:29:34

1

插入只記錄不是在你的其他表,或者使用一個NOT EXISTS條款或通過左側的接合部和從結果

1

最好的辦法是使用公共密鑰過濾所有not-NULL記錄(或有關鍵第一個表格是第二個表格鍵的主要部分)。這樣,您只需從表1中選擇不存在的行即可。

如果您需要以某種方式轉換密鑰,最佳選擇是在TABLE1上使用插入觸發器:當您在其中插入行時,觸發器將觸發,並且您可以將數據插入到TABLE2中。這具有使用單個事務的好處 - 也是缺點。這是一個好處,因爲您保留數據一致性,如果將TABLE2用於報告或其他非必要目的,則是缺點。

不要決定在TABLE1中使用表示行已插入的標誌。這對於邏輯和物理設計來說都很醜陋,因爲您將表中的數據耦合到使用該表的進程。

+0

你是什麼意思「第一個表的關鍵是第二個表的關鍵的主要部分」? – Ossi 2009-10-22 14:23:21

0

我經常使用兩種方法。根據表格的性質,一種方式可能比另一種方式更好,但是如果您使用#2,則可能有機會使表格結構更好。

1.)確保您的表已編入索引並具有良好的主鍵。從table1中選擇主鍵在table2中不存在的所有記錄。這個作品將用於規格化的表格

2.)如果你的表格沒有被標準化,並且沒有很好的密鑰,你可以添加一個ProcessedDate到table1。插入具有空ProcessDate的所有記錄,然後將ProcessDate設置爲當前日期時間。在插入table2的過程中,您只需確保沒有新記錄插入到table1中。

不知道你的表格結構很難給出一個很好的答案。