无主键场景下用FULL OUTER JOIN添加状态列识别数据匹配情况
解决方案:添加状态列区分FULL OUTER JOIN的匹配情况
你可以通过CASE语句判断连接后的行状态,无需依赖主键,直接基于连接后的表数据是否存在来判定。修改后的SQL如下:
SELECT a.column1, a.column2, a.column3, a.column4, a.column5, -- 状态列:区分匹配、table1不匹配、table2不匹配 CASE WHEN a.column1 IS NOT NULL AND b.column1 IS NOT NULL THEN 'M' WHEN a.column1 IS NOT NULL THEN 'UT1' ELSE 'UT2' END AS status FROM table1 a FULL OUTER JOIN table2 b ON a.column1 = b.column1 AND a.column2 = b.column2;
状态判断逻辑
- 'M'(匹配数据):当
table1和table2的对应行都存在时(通过连接字段column1/column2非空判断),说明两行匹配 - 'UT1'(table1中不匹配的数据):仅
table1的行存在,table2中无对应匹配行 - 'UT2'(table2中不匹配的数据):仅
table2的行存在,table1中无对应匹配行
如果业务场景中column1可能存在空值,可同时判断column1和column2的非空状态,确保判定准确:
CASE WHEN a.column1 IS NOT NULL AND a.column2 IS NOT NULL AND b.column1 IS NOT NULL AND b.column2 IS NOT NULL THEN 'M' WHEN a.column1 IS NOT NULL AND a.column2 IS NOT NULL THEN 'UT1' ELSE 'UT2' END AS status
内容的提问来源于stack exchange,提问作者Ace
相关产品推荐
相关产品推荐

