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

问下 left anti join 用法跟 not exists 的区别是什么?

问下 left anti join 用法跟 not exists 的区别是什么?

展开
收起
游客3oewgrzrf6o5c 2022-07-13 13:13:04 573 0
1 条回答
写回答
取消 提交回答
  • CSDN全栈领域优质创作者,万粉博主;InfoQ签约博主;华为云享专家;华为Iot专家;亚马逊人工智能自动驾驶(大众组)吉尼斯世界纪录获得者

    left anti join和not exists子查询在SQL中有不同的用途和行为。

    1. left anti join:这是一种SQL中的联接类型,通常用于从左边的表中选择那些在右表中没有匹配的行。它基本上是一个“左外连接”的镜像,排除了右表中与左表匹配的行。只有左表的字段会被包含在结果中。

    例如:

    SELECT *
    FROM left_table
    LEFT ANTI JOIN right_table ON left_table.id <> right_table.id;
    

    在这个例子中,所有在left_table中但不在right_table中的记录将被选择。只有left_table的字段会被包含在结果中。

    1. not exists子查询:这是一种在嵌套查询中使用的技术,用于在子查询中查找满足某些条件的记录,然后根据这些记录来过滤主查询的结果。如果子查询找不到满足条件的任何记录,那么主查询的结果将会被返回。

    例如:

    SELECT *
    FROM left_table
    WHERE NOT EXISTS (SELECT * FROM right_table WHERE right_table.id = left_table.id);
    

    在这个例子中,所有在left_table中但不在right_table中的记录将被选择。但是,与left anti join不同的是,所有的字段(包括来自right_table的字段)都可能会被包含在结果中,只要right_table的相应行没有与left_table的行匹配。

    总结来说,left anti join和not exists子查询在SQL中有不同的用途和行为。Left anti join主要用于从左表中选择没有在右表中匹配的行,而结果只包含左表的字段。Not exists子查询则用于在子查询找不到满足条件的任何记录时返回主查询的结果,可能会包含来自两个表的所有字段。

    2023-08-07 15:57:07
    赞同 展开评论 打赏

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

相关电子书

更多
Lazy Join Optimizations Without Upfront Statistics 立即下载
Get rid of traditional ETL, Move to Spark! 立即下载
低代码开发师(初级)实战教程 立即下载