MySQL中能否使用独立CASE语句实现两表按条件取去重值存入同一列?
结论:你当前写的CASE语句无法实现需求
核心原因
SQL中的CASE表达式遵循短路求值规则:只要排在前面的WHEN条件判断为真,就会直接返回对应值,不会执行后续的WHEN条件校验,完全不符合你要求的「第一个条件匹配成功仍要校验第二个条件」的逻辑。
另外CASE表达式对同一行数据只会返回一个结果,如果某行数据同时满足condition1和condition2,你只能拿到table1.column的值,无法同时拿到table2.column的对应值,也没法满足你两个条件结果都要存入同一列的需求。
正确实现方案
用UNION拼接两个条件的查询结果即可,UNION本身会自动对合并后的结果去重,不需要额外加DISTINCT:
-- 拿满足condition1的table1列值 SELECT table1.column AS target_column FROM 你已经关联好的两表结果 WHERE condition1 UNION -- 拿满足condition2的table2列值 SELECT table2.column AS target_column FROM 你已经关联好的两表结果 WHERE condition2
如果你的需求是两个条件同时满足时需要走特殊合并逻辑,可以在上述基础上调整WHERE条件或者加额外处理分支即可。
内容的提问来源于stack exchange,提问作者Gprj
相关产品推荐
相关产品推荐

