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

SQL FULL JOIN多条件关联:按has_sha1字段动态匹配文件

实现条件化的FULL JOIN匹配逻辑

可以通过在ON子句中编写分支条件来实现需求,以下是修正后的完整SQL:

SELECT 
    COALESCE(filesA.file_name, filesB.file_name) AS file_name,
    filesA.size AS sizeA, 
    filesB.size AS sizeB, 
    filesA.version AS versionA, 
    filesB.version AS versionB
FROM
    (SELECT * FROM files WHERE version = '1.0') filesA
FULL JOIN
    (SELECT * FROM files WHERE version = '1.1') filesB
ON filesA.file_name = filesB.file_name
AND (
    -- 当两边文件都需要用sha1匹配时,必须sha1相等
    (filesA.has_sha1 = true AND filesB.has_sha1 = true AND filesA.sha1 = filesB.sha1)
    -- 只要有一方不需要sha1匹配,仅通过file_name匹配
    OR NOT (filesA.has_sha1 AND filesB.has_sha1)
);

逻辑说明

  • 当两个版本的文件均标记has_sha1 = true时,必须同时满足file_name一致且sha1值相等才会建立匹配,解决同名但不同内容文件的区分问题;
  • 只要任意一方文件的has_sha1 = false,则仅通过file_name进行匹配,忽略sha1字段的差异(包括NULL值);
  • 使用COALESCE函数确保当某版本中不存在该文件时,file_name字段仍能显示有效值(避免NULL)。

原方案的问题

你之前添加AND filesA.sha1 = filesB.sha1的写法,会强制所有匹配都要求sha1相等。但对于has_sha1 = false且sha1为NULL的文件来说,NULL = NULL在SQL中不成立,导致这类文件无法正常匹配,不符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:22:38