You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite跨双数据库多表JOIN查询:文件SHA值差异校验

解决SQLite跨库对比绝对路径文件SHA差异的问题

要精准找出两个库中绝对路径相同但SHA校验和不同的文件,核心是先分别生成每个库的绝对路径+SHA的唯一数据集,再通过绝对路径关联对比,避免因paths表ID不一致导致的重复关联。

完整SQL语句

首先需要将第二个数据库挂载到当前连接(假设db2的文件路径为path/to/db2.db):

ATTACH 'path/to/db2.db' AS db2;

然后执行对比查询:

SELECT 
    db1_data.abs_path,
    db1_data.sha AS sha_from_db1,
    db2_data.sha AS sha_from_db2
FROM (
    -- 生成db1中所有文件的绝对路径与SHA
    SELECT 
        rtrim(p.path, '/') || '/' || ltrim(f.relative_path, '/') AS abs_path,
        f.sha
    FROM db1.files f
    JOIN db1.paths p ON f.path_prefix_index = p.id
) db1_data
INNER JOIN (
    -- 生成db2中所有文件的绝对路径与SHA
    SELECT 
        rtrim(p.path, '/') || '/' || ltrim(f.relative_path, '/') AS abs_path,
        f.sha
    FROM db2.files f
    JOIN db2.paths p ON f.path_prefix_index = p.id
) db2_data 
    ON db1_data.abs_path = db2_data.abs_path
WHERE db1_data.sha != db2_data.sha;

关键说明

  1. 路径拼接优化:用rtrim和ltrim处理路径的斜杠,避免因paths.path末尾带斜杠、files.relative_path开头带斜杠导致拼接出//,或者两边都不带斜杠导致路径断裂,保证绝对路径的一致性。
  2. 避免重复的核心:子查询会为每个库生成唯一的绝对路径记录(因为绝对路径本身是唯一标识),后续通过绝对路径做INNER JOIN时,不会出现多对多关联导致的重复行。
  3. 结果精准性:仅筛选SHA值不同的记录,直接输出差异文件的绝对路径及两个库中的SHA值,符合需求。

内容的提问来源于stack exchange,提问作者Dennis R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 08:32:19