hive两个字段值相减,报错:NoViableAltException(232@[])

在hive操作同一表中,相同字段的不同行数据相减时,报了个错如标题的错。
	(LEFT JOIN嘛,当然也适用于不同表的字段内容相减)。
解决如下:

下面展示 第一种方式的代码

SELECT
    a.sumnum - b.sumnum
FROM
    qd3702.summember a
LEFT JOIN
    (
        SELECT
            sumnum
        FROM
            qd3702.summember
        WHERE
            corporatecode = '37020001' ) b
ON
    1=1
WHERE
    corporatecode = '37020000';

下面展示 第二种方式的代码(推荐)。

SELECT
    (a.sumnum-b.sumnum) sumnum
FROM
    (
        SELECT
            sumnum
        FROM
            qd3702.summember
        WHERE
            corporatecode = '37020000' ) a,
    (
        SELECT
            sumnum
        FROM
            qd3702.summember
        WHERE
            corporatecode = '37020001' ) b;
FROM qd3702.summember WHERE corporatecode = '37020000';


分析:
1、在一般情况下,交叉连接(Cross Join)的性能通常比 LEFT JOIN 要高。这是因为交叉连接生成的结果集大小等于两个表的行数的乘积,而 LEFT JOIN 会根据连接条件过滤结果,可能生成较小的结果集。
但需要注意的是,具体的性能差异取决于数据库的优化器、表的索引情况、数据量等多个因素。在实际情况中,为了获得最佳性能,建议根据查询需求选择合适的连接方式,并通过分析执行计划(EXPLAIN)等工具来优化查询。
2、如果 LEFT JOIN 与交叉连接在业务需求上实现相同的功能,而 LEFT JOIN 的连接条件能够有效限制结果集大小,那么 LEFT JOIN 在实际应用中可能更为常见。
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值