gpt4 book ai didi

sql - Hive 左半连接 'NOT EXISTS'

转载 作者:行者123 更新时间:2023-12-02 06:40:23 25 4
gpt4 key购买 nike

我有两个带有单个键列的表。表 a 中的键是表 b 中所有键的子集。我需要从表 b 中选择不在表 a 中的键。

这里引用了 Hive 手册:“LEFT SEMI JOIN 以有效的方式实现了不相关的 IN/EXISTS 子查询语义。从 Hive 0.13 开始,使用子查询支持 IN/NOT IN/EXISTS/NOT EXISTS 运算符,因此大多数这些 JOIN 不再需要手动执行. 使用 LEFT SEMI JOIN 的限制是只能在连接条件(ON 子句)中引用右侧表,而不能在 WHERE 或 SELECT 子句等中引用。

他们使用这个例子来说明:

    SELECT a.key, a.value FROM a WHERE a.key IN (SELECT b.key FROM B);

相当于

    SELECT a.key, a.val FROM a LEFT SEMI JOIN b ON (a.key = b.key);

但是,我需要做的是第一个示例“NOT IN;”。不幸的是,Hive 0.13 不支持此语法。仅用于说明:

    SELECT a.key, a.value FROM a WHERE a.key NOT IN (SELECT b.key FROM B);

我在此网站上搜索推荐,并看到了以下示例:

    SELECT a.key FROM a LEFT OUTER JOIN b ON a.key = b.key WHERE b.key IS NULL;

它没有按预期工作。当我加入 a.key NOT in b 和 a.key IN b 时,我不会以这种方式得到原始的 a 。也许这是因为此查询无法解决问题,请注意粗体文本 - b.key 不应出现在 WHERE 中。

那我该怎么办?还有什么窍门吗?谢谢!

附注我无法分享任何真实数据;这是一个非常简单的示例,其中 a 中的键全部包含在 b 中,并且 a 是 b 的子集。

最佳答案

如果您想要表 b 中的结果,也许您可​​以执行以下操作?

  SELECT b.key FROM b LEFT OUTER JOIN a ON b.key = a.key WHERE a.key IS NULL;

关于sql - Hive 左半连接 'NOT EXISTS',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25041026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com