我有表,我將記錄插入到另一個表。 標記記錄插入的最佳方式是什麼,所以它不會被嘗試再次插入?標記記錄插入
標記記錄插入
回答
你可以看到像這樣的兩個表之間的差異:從tableFoo
SELECT *
LEFT JOIN tableBar ON tableFoo.commonColumn = tableBar.commonColumn
WHERE tableBar.commonColumn IS NULL
這個想法是,兩個表都有一個要匹配的列,當列爲空時加入的記錄是僅存在於tableBar中的記錄。
這個工作原因是因爲即使其中一個表具有空值,左連接也會返回記錄,這與內連接不同,後者的做法相反。
獲得這些記錄後,您可以根據返回的ID插入。
我還沒有共同的列,我可以嘗試添加一個,如何結合2列kkep它獨特(其中一個將是時間戳)這將是可能的嗎? – Ossi 2009-10-22 14:21:50
這兩個表都應該有唯一的列,如ID。您可以加入該專欄。 – 2009-10-22 14:23:11
如果您不明白,請隨時提出更多問題:]並感謝接受! – 2009-10-22 14:29:34
插入只記錄不是在你的其他表,或者使用一個NOT EXISTS
條款或通過左側的接合部和從結果
最好的辦法是使用公共密鑰過濾所有not-NULL
記錄(或有關鍵第一個表格是第二個表格鍵的主要部分)。這樣,您只需從表1中選擇不存在的行即可。
如果您需要以某種方式轉換密鑰,最佳選擇是在TABLE1上使用插入觸發器:當您在其中插入行時,觸發器將觸發,並且您可以將數據插入到TABLE2中。這具有使用單個事務的好處 - 也是缺點。這是一個好處,因爲您保留數據一致性,如果將TABLE2用於報告或其他非必要目的,則是缺點。
不要決定在TABLE1中使用表示行已插入的標誌。這對於邏輯和物理設計來說都很醜陋,因爲您將表中的數據耦合到使用該表的進程。
你是什麼意思「第一個表的關鍵是第二個表的關鍵的主要部分」? – Ossi 2009-10-22 14:23:21
我經常使用兩種方法。根據表格的性質,一種方式可能比另一種方式更好,但是如果您使用#2,則可能有機會使表格結構更好。
1.)確保您的表已編入索引並具有良好的主鍵。從table1中選擇主鍵在table2中不存在的所有記錄。這個作品將用於規格化的表格
2.)如果你的表格沒有被標準化,並且沒有很好的密鑰,你可以添加一個ProcessedDate到table1。插入具有空ProcessDate的所有記錄,然後將ProcessDate設置爲當前日期時間。在插入table2的過程中,您只需確保沒有新記錄插入到table1中。
不知道你的表格結構很難給出一個很好的答案。
- 1. 插入記錄
- 2. 插入記錄
- 3. 插入記錄
- 4. 記錄MSSQL插入
- 5. has_many記錄插入
- 6. 插入批記錄,許多插入查詢,遊標,while循環或事務記錄每個記錄更好
- 7. 在光標內循環插入記錄
- 8. 插入記錄基於標誌
- 9. 如何將所有TClientDataSet記錄標記爲插入?
- 10. awk在匹配的標記打印中插入行/記錄
- 11. 經典ASP:插入記錄
- 12. 插入重複記錄LINQ
- 13. Web API插入記錄
- 14. 多記錄插入 - Classsic ASP
- 15. 插入記錄與數
- 16. SQL不插入記錄
- 17. 插入記錄到sqlserver db
- 18. Android循環插入記錄
- 19. Java-Oracle插入記錄
- 20. 插入記錄的sql
- 21. 插入下一記錄
- 22. PDO無法插入記錄
- 23. 插入記錄的MySQL
- 24. 插入100000+記錄在MySQL
- 25. Linq to Entity - 插入記錄
- 26. 從記錄中插入html
- 27. SqlDataAdapter.Update沒有插入記錄
- 28. 插入表中的記錄
- 29. PHP,MYSQL記錄不插入
- 30. 插入記錄冬眠
示例代碼表示讚賞;) – Ossi 2009-10-22 14:03:16