4
A
回答
4
如果你沒有像PLSQL開發工具,你可以完全外連接兩個表。如果他們有主鍵,則可以在聯接中使用它。這將使您即時查看任一表格中缺失的記錄。 然後,對於兩個表中都存在的記錄,可以比較每個字段。您應該注意到,您不能將null與常規=運算符進行比較,因此檢查是table1.field1 = table2.field1將在兩個字段都爲空時返回false。因此,如果每個字段的值與另一個表中的值相同,或者兩者都爲空,則必須檢查每個字段。
您的查詢可能是這樣的(返回不匹配的記錄):
select
*
from
table1 t1
full outer join table2 t2 on t2.id = t1.id
where
-- Only one record exists
t1.id is null or t2.id is null or
(-- The not = takes care of one of the fields being null
not (t1.field1 = t2.field1) and
-- and they cannot both be null
(t1.field1 is not null or t2.field1 is not null)
)
你將不得不復制field1的條件爲每個字段。當然,您可以編寫一個函數來比較字段數據,以使您的查詢更輕鬆,但是您應該記住,當您需要比較兩個大型表時,這可能會顯着降低性能。
如果您的表沒有主鍵,則需要交叉連接它們並對每個結果記錄執行這些檢查。您可以通過在每個必填字段上使用完全外連接來加速一點,因爲它不能爲空,因此可以在連接中使用。
4
假設你想在兩個表中的數據(在整個行差異)比較:
SELECT *
FROM (SELECT 's1.t' "Row Source", a.*
FROM (SELECT col1, col2
FROM s1.t tbl1
MINUS
SELECT col1, col2
FROM s2.t tbl2) a
UNION ALL
SELECT 's2.t', b.*
FROM (SELECT col1, col2
FROM s2.t tbl2
MINUS
SELECT col1, col2
FROM s1.t tbl1) b)
ORDER BY 1;
更多info有關比較兩個表。
相關問題
- 1. Mapreduce表Diff
- 2. 指定在Oracle中執行liquibase diff的模式?
- 3. diff sqlite表的Git鉤子
- 4. HTML中的ClearCase diff
- 5. SQL Server:匹配兩個diff表中的2個diff列的標識規範
- 6. 中DIFF PhpStorm
- 7. 爲什麼'svn diff --diff-cmd = diff'輸出內部diff格式?
- 8. 使用樹事件在中心佈局中加載diff-diff數據表
- 9. 如何DIFF PDF/XFA表單中GitLab
- 10. Diff Docker註冊表映像
- 11. 反轉diff或patch || CVS diff
- 12. 什麼是`git diff --word-diff'默認正則表達式?
- 13. Perforce的變更表的diff視圖
- 14. 在Oracle中使用兩個表更新Oracle中的表
- 15. 在Java中的diff實現
- 16. Java中的Git Diff命令
- 17. SourceTree中的IntelliJ Diff工具
- 18. Msbuild中的TortoiseSVN diff命令
- 19. 命令行中的Netbeans diff
- 20. Unix中的Diff選項
- 21. DIFF之間不同的表列
- 22. 「git diff」中的「diff --git」輸出是指什麼?
- 23. GIT中+ DIFF弧與修復的diff(是來自工作[主]!)
- 24. 名ASSOC-DIFF的
- 25. JOIN和GROUP BY功能oracle作爲DIFF列
- 26. 更新表中的Oracle
- 27. oracle中的換行表
- 28. Oracle中表的類型sql
- 29. oracle中的外部表?
- 30. oracle中的查找表10g
你有PLSQL Developer之類的工具嗎?它有一個「比較表數據」功能。 – GolezTrol 2010-12-23 00:30:43