开发者社区 > 大数据与机器学习 > 大数据开发治理DataWorks > 正文

SQL查询left join,on后面的连接键,空跟空死活匹配不上[尴尬]是正常的吗? 比如on t

SQL查询left join,on后面的连接键,空跟空死活匹配不上[尴尬]是正常的吗? 比如on t1.a = t2.a and t1.b = t2.b,如果t1.b是null,t2.b也是null,就关联不上

展开
收起
十一0204 2023-04-11 22:43:57 603 0
2 条回答
写回答
取消 提交回答
  • 值得去的地方都没有捷径

    是的,当使用 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 检查空值以允许匹配。

    2023-04-15 15:30:05
    赞同 展开评论 打赏
  • 一个九年资深的程序员,擅长数据库、Java、C#、系统运维、电脑技巧等方面知识,阿里云专家博主、C站站优质博主、公众号运营超五年,热爱分享IT技术相关技术文章,给大家提供帮助!

    可以把null SQLServer 加上 isnull(字段,默认值) mysql加上 ifnull(字段,默认值) 去on 关联匹配

    2023-04-12 15:59:42
    赞同 展开评论 打赏

DataWorks基于MaxCompute/Hologres/EMR/CDP等大数据引擎,为数据仓库/数据湖/湖仓一体等解决方案提供统一的全链路大数据开发治理平台。

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载