SQL查询left join,on后面的连接键,空跟空死活匹配不上[尴尬]是正常的吗? 比如on t1.a = t2.a and t1.b = t2.b,如果t1.b是null,t2.b也是null,就关联不上
是的,当使用 LEFT JOIN 进行连接时,如果 ON 子句中指定的连接键在其中一个或两个表中为 NULL 值时,则无法匹配到该连接键,从而导致连接行为空。
当 t1.b 和 t2.b 均为 NULL 值时,t1.b = t2.b 条件将被视为未知,该连接行将不符合 ON 子句的条件,不会与结果集合并。这是 SQL 的预期行为。
如果您需要使用 NULL 值匹配连接键,可以使用 COALESCE 函数或 IS NULL 条件表达式来处理 NULL 值。例如,您可以使用以下语句:
SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.a AND (t1.b = t2.b OR (t1.b IS NULL AND t2.b IS NULL));
此查询使用 OR 条件表达式来包含空连接键的相等性,进一步使用 t1.b IS NULL AND t2.b IS NULL 检查空值以允许匹配。
可以把null SQLServer 加上 isnull(字段,默认值) mysql加上 ifnull(字段,默认值) 去on 关联匹配
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
DataWorks基于MaxCompute/Hologres/EMR/CDP等大数据引擎,为数据仓库/数据湖/湖仓一体等解决方案提供统一的全链路大数据开发治理平台。