我有2个大桌子(每个大约100-150k行)。
这些表的结构是相同的。每个表中的实体ID也相同。
我需要一种非常快速的方法来比较这些表并回答以下问题:
谢谢!
编辑:我需要使用C#或可能的存储过程进行此比较(然后通过c#选择结果)
答案 0 :(得分:2)
如果您有两个表// View twice as wide as the device screen
let masterView = UILabel(frame: CGRect(x: 0, y: 0, width: self.view.frame.width * 2, height: 100))
let swipeLeftGesture = UISwipeGestureRecognizer(target: self, action: #selector(ThisViewController.swipeLeft))
let swipeRightGesture = UISwipeGestureRecognizer(target: self, action: #selector(ThisViewController.swipeRight))
swipeLeftGesture.direction = UISwipeGestureRecognizerDirection.left
swipeRightGesture.direction = UISwipeGestureRecognizerDirection.right
masterView.addGestureRecognizer(swipeLeftGesture)
masterView.addGestureRecognizer(swipeRightGesture)
self.addSubview(masterView)
func swipeLeft() {
// Moves masterView to the left equal to that of the width of the screen (or half of masterView's total width)
let moveLeftFrame = CGRect(x: (masterView.frame.width / 2) * -1, y: masterView.frame.minY, width: masterView.frame.width, height: masterView.frame.height)
UIView.animateKeyframes(withDuration: 0.5, delay: 0, options: .calculationModeCubic, animations: {
UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 0.4, animations: {
masterView.frame = moveLeftFrame
})
}, completion: { (true) in
})
}
func swipeRight() {
// Moves masterView back to original location
let moveRightFrame = CGRect(x: 0, y: masterView.frame.minY, width: masterView.frame.width, height: masterView.frame.height)
UIView.animateKeyframes(withDuration: 0.5, delay: 0, options: .calculationModeCubic, animations: {
UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 0.4, animations: {
masterView.frame = moveRightFrame
})
}, completion: { (true) in
})
}
和Table1
并且它们具有相同的结构和名为Table2
的主键,则可以使用此SQL:
ID
如果您要比较并找到一列或另一列不同的行,那就有点棘手了。您可以编写SQL来自己检查每个列,但是向两个表添加临时CHECKSUM列并比较这些列可能更简单。如果校验和不同,则一列或多列不同。
答案 1 :(得分:1)
SQL Data Compare是一个很好的工具。此外,Microsoft Visual Studio SQL Server数据工具还具有数据比较功能。
答案 2 :(得分:0)
我发现以下方法在比较大数据集时表现非常好。
http://weblogs.sqlteam.com/jeffs/archive/2004/11/10/2737.aspx
基本上UNION ALL
的两个数据源然后聚合它们,只返回在另一个表中没有相同匹配行的行。
With unionCTE As (
Select 'TableA' As TableName, col1, col2
From TableA
Union All
Select 'TableB', col1, col2
From TableB)
Select Max(TableName), col1, col2
From unionCTE
Group By col1, col2
Having Count(*) = 1
Order By col1, col2, TableName;
这将在单个结果集中显示结果,如果有任何行具有相同的键但值不同,则行将高于另一个,以便您可以轻松地比较表之间已更改的值。 / p>
如果需要,可以很容易地将其放入存储过程中。