以下是引用csyx在2022-9-21 17:23:22的发言:
如果分开查询的结果没问题,就两个分开的查询结果联合起来
SELECT a.* FROM (m.newer) a ;
inner join (m.older) b on a.子目录 == b.子目录 and a.文件名 == b.文件名 ;
where a.修改时间 > b.修改时间 ;
union ;
SELECT a.* FROM (m.newer) a ;
left join (m.older) b on a.子目录 == b.子目录 and a.文件名 == b.文件名 ;
where b.文件名 is null
评价:
第一
SELECT files1.* FROM files1 WHERE !files1.修改时间 in (SELECT 修改时间 FROM files2)
这段代码速度非常快,但是不能辨别时间差异究竟哪个是新的,所以有风险;另外,如果相同的文件放在不同的子目录中,它也会忽视;
第二
m.older = 'files1'
m.newer = 'files2'
SELECT a.* FROM (m.newer) a ;
inner join (m.older) b on a.子目录 == b.子目录 and a.文件名 == b.文件名 ;
where a.修改时间 > b.修改时间
这段代码使用==达到精准的效果,不过速度明显变慢,也会无视新增加的文件;
第三
SELECT a.* FROM (m.newer) a ;
left join (m.older) b on a.子目录 == b.子目录 and a.文件名 == b.文件名 ;
where (a.修改时间 > b.修改时间) or (b.文件名 is null)
或者
SELECT a.* FROM (m.newer) a ;
inner join (m.older) b on a.子目录 == b.子目录 and a.文件名 == b.文件名 ;
where a.修改时间 > b.修改时间 ;
union ;
SELECT a.* FROM (m.newer) a ;
left join (m.older) b on a.子目录 == b.子目录 and a.文件名 == b.文件名 ;
where b.文件名 is null
只要把b.文件名 is null加上去,就会出现更新一样的文件、并且修改时间也一样!
[此贴子已经被作者于2022-9-22 09:24编辑过]