我有两个表audio
和folder
,其中包含以下架构
AUDIO
-------------------------------
ID | NAME | FILESIZE | FID
-------------------------------
FOLDER
-------------------------
ID | NAME
-------------------------
音频表保存从设备扫描的音频文件,文件夹表保存文件的文件夹。
现在我想要内容更改检测,以确定在后续设备扫描中是否有任何新设备添加/删除的新歌曲。所以我有两个副本表newaudio
和newfolder
。
因此,为了进行比较,我运行以下查询
select case
when (select count(audio.id) from audio,newaudio where audio.filesize=newaudio.filesize and audio.name=newaudio.name and (select name from folder where id=audio.pid)=(select name from newfolder where id=newaudio.pid))=(select count(*) from newaudio)
then 1
else 0
end as matchResult
有没有更好的opmtimized查询来做同样的事情?
修改
Audio
和folder
表保存上次扫描的条目。
现在,当我删除或添加歌曲并再次同步设备时,条目会显示在newaudio
和newfolder
表中。
因此,新旧条目之间的比较。
对于下一次扫描,newaudio
和newfolder
替换audio
,再次创建folder
和new*
表,依此类推
EDIT2
目的只是检测内容变化 - 是或否。我并不关心更改的文件。
答案 0 :(得分:0)
使用此查询获取新文件或已更改文件的列表:
SELECT id, name, filesize, fid
FROM newaudio
EXCEPT
SELECT id, name, filesize, fid
FROM audio
使用此查询获取已删除文件的列表:
SELECT *
FROM audio
WHERE id NOT IN (SELECT id
FROM newaudio)