如何快速找出表中变化部分的数据?
大家好:
现有一张表叫MyTable, 其中有三列ColA, ColB和ColC
数据类似如下:
ColAColBColC
-------------------------------------------------------
2013-3-18B01.70
2013-3-18B12.50
2013-3-18B23.60
2013-3-18B34.70(删除)
...
2013-5-1B01.70
2013-5-1B12.50
2013-5-1B23.65(修改)
2013-5-1B45.58(新增)
...
由于数据较多20W左右,要找出这张表中二个不同日期的有差异性的数据,
也就是要找出对于2013-5-1来说,新增或修改或删除了的数据, 没变化的过滤掉:
2013-3-18B34.70(删除)
2013-5-1B23.65(修改)
2013-5-1B45.58(新增)
=========================================
问题:
1. 如何快速地找出这样的数据?(怎样才效率更高!!!!)
2. 对同一张表MyTable进行left join 或 right join时,结果和inner join的都一样,为什么?
如:
select o.ColC as OldC, n.ColC as NewC
from MyTable o
left join MyTable n on (n.ColB=o.ColB)
where o.ColA='2013-3-18' and n.ColA='2013-05-01'
先谢谢大家。
[解决办法]
你的这个设计不好,换个思路,做个触发器,把你要的数据存到另一个表里面去吧
[解决办法]
个人认为应该在每天0点生成一张临时表比较好! 只有一张表怎么比较啊!!
这样进行比对 通过左连接 查出修改和新增的表 通过右连接查出删除的表
[解决办法]
这种情况,你要给个统计时间才好统计,比如:一个月统计一次。这样才会有比较吗。才可以比较出表的变化。
Left join 与 Inner Join 的区别:http://zhidao.baidu.com/question/407984766.html
至于Left Join的时候,执行顺序是On先执行,Where后执行,但是On条件删除的行有可能会再次添加回来,Where条件删除的行永久的。