我有兩個具有相同結構的表。
我該如何檢查這兩個行中的所有行是否相等?
即第一個表中的每一行存在於另一箇中,反之亦然。檢查兩個表是否相等
2
A
回答
0
這是一個有趣的。我不知道是否有一個更好的或者更簡單的方式來做到這一點,但這樣的事情可能工作:
假設你有兩個表,T1和T2,和他們每個人都有兩列,C1和C2
create view t1_counts
as select c1, c2, count(*) as num
from t1
group by c1, c2;
create view t2_counts
as select c1, c2, count(*) as num
from t2
group by c1, c2;
select t1_counts.c1, t1_counts.c2, t1_counts.num, t2_counts.num
from t1_counts full outer join t2_counts on (t1_counts.c1 = t2_counts.c1 and t1_counts.c2 = t2_counts.c2)
where t1_counts.num != t2_counts.num;
如果兩個表相等,則輸出將爲空。
1
Jeff的博客解決方案與Hive相關:http://weblogs.sqlteam.com/jeffs/archive/2004/11/10/2737.aspx。
「其基本思想是:如果我們將所有列上的兩個表的聯合進行分組,那麼如果兩個表相同,則所有組都將導致2的COUNT(*)。但對於任何行在GROUP BY子句的任何一列上都沒有完全匹配,COUNT(*)將是1 - 這些都是我們想要的。我們還需要在UNION的每個部分添加一列以指示每行到哪個表從,否則沒有辦法區分哪一行來自哪個表。「
處理重複的改進方案被公佈爲註釋:http://weblogs.sqlteam.com/jeffs/archive/2004/11/10/2737.aspx#3155 (再現代碼,因爲它是從註釋最初發布用戶「佩裏」)
SELECT MIN(TableName) as TableName, COL1, COL2, COL3 ...
FROM
(
SELECT 'Table A' as TableName, COUNT(*) NDUPS, A.COL1, A.COL2, A.COL3, ...
FROM Table1 A GROUP BY ID, COL1, COL2, COL3 ...
UNION ALL
SELECT 'Table B' as TableName, COUNT(*) NDUPS, B.COL1, B.COl2, B.COL3, ...
FROM Table2 B
GROUP BY ID, COL1, COL2, COL3 ...
) tmp
GROUP BY NDUPS, ID, COL1, COL2, COL3 ...
HAVING COUNT(*) = 1
ORDER BY ID
相關問題
- 1. 檢查兩個位置是否相等
- 2. 檢查兩個「select」是否相等
- 3. 檢查兩個向量是否相等
- 4. 表單驗證檢查兩個字段是否相等
- 5. 庫檢查兩個正則表達式是否相等/同構
- 6. 檢查兩個數字列表是否相等
- 7. 檢查對是否相等
- 8. 檢查ForeignKeys是否相等
- 9. 檢查兩個列表相等
- 10. 檢查兩個查詢是否相同
- 11. Pythonic的方式來檢查是否兩個列表的列表是相等的
- 12. 這兩個表達式是否相等
- 13. 檢查是否在MySQL表中的兩列相等太慢
- 14. 檢查兩個通用類型是否相等
- 15. 在AS3中,如何檢查兩個JSON對象是否相等?
- 16. 檢查兩個數字是否相等的最佳方法
- 17. 如何在JSP中檢查兩個字符串是否相等?
- 18. 檢查兩個字符數組是否相等C
- 19. 檢查兩個數組的值是否相等
- 20. 如何靜態檢查兩個比率是否相等?
- 21. 如何檢查兩個整數typedefs是否相等?
- 22. 如何檢查兩個gps路線是否相等?
- 23. 檢查兩個字符串是否相等
- 24. 可可:檢查兩個NSArrays是否相等
- 25. Ant:檢查兩個數字是否相等
- 26. 有沒有辦法檢查兩個DOM元素是否相等?
- 27. 通過兩個視圖循環檢查是否相等
- 28. 檢查數組中的至少兩個元素是否相等
- 29. 檢查兩個n-ary樹在Haskell中是否相等
- 30. 檢查兩個int數組是否相等 - 無論順序
願您發表的總結爲每個鏈接?這樣,如果鏈接斷開,信息不會丟失。 – fxm