如何基于两张表的两列值查询生成新列,无匹配时返回null
解决方案
你之前用关联查询无法返回null值,大概率是误用了INNER JOIN,这类关联只会返回两张表匹配成功的行,换成以下两种方案即可实现需求:
方法1:LEFT JOIN 实现
如果table2的column2没有重复值,用左关联可以直接实现:
SELECT t1.column1, CASE WHEN t2.column2 IS NOT NULL THEN 'present' ELSE NULL END AS column3 FROM table1 t1 LEFT JOIN table2 t2 ON t1.column1 = t2.column2;
方法2:EXISTS 子查询实现
如果table2的column2存在重复值,用左关联会导致table1的行重复,这种场景用EXISTS子查询性能更高、也不会产生冗余数据:
SELECT t1.column1, CASE WHEN EXISTS (SELECT 1 FROM table2 t2 WHERE t2.column2 = t1.column1) THEN 'present' ELSE NULL END AS column3 FROM table1 t1;
两种实现均完全匹配你给出的示例结果,会保留table1的所有行,只要column1的取值存在于table2.column2的集合中就返回present,否则返回null。
内容的提问来源于stack exchange,提问作者Arsalan
相关产品推荐
相关产品推荐

