在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 在实际应用中可能更为常见。