gpt4 book ai didi

sql - 如何比较两个表并返回与 HIVE 不同的行

转载 作者:可可西里 更新时间:2023-11-01 14:19:37 28 4
gpt4 key购买 nike

假设我有一个包含大约 180 列和 100 条记录的表。该表被备份到临时表中,原来的表被删除。此迁移(更改)在生成相同表的管道上运行后。我想将备份表与新的 adn 行(记录)进行比较,并将任何差异移至第 3 个表(_result 表),所以我这样做:

INSERT OVERWRITE TABLE
zakj_customers.customers_detail_result
SELECT
acct_id, IF (a.title != b.title, 1, 0) title, IF (a.fname != b.fname, 1, 0) fname, IF (a.dob != b.dob, 1, 0) dob, IF (a.cr_date != b.cr_date, 1, 0) cr_date
FROM
zakj_customers.customers_detail a
LEFT OUTER JOIN
zakj_customers.customers_detail_backup b
ON
(a.acct_id = b.acct_id)
ORDER BY
title DESC,fname DESC,dob DESC,cr_date DESC
HAVING
title > 0 AND fname > 0 AND dob > 0 AND cr_date > 0
;

很明显这个查询是错误的,我对 SQL 不太了解,而且我遇到了语法错误,所以我无法将它正确地组合在一起,并且在票据上以这种格式提供,这显然是错误的。

任何人都可以看到这样做的方法吗?

干杯

最佳答案

必须使用“case when”而不是 if:

Case When a.title <> b.title then 1 Else 0 End title

我不会把 having 写成 where 条件的表达式:

INSERT Into
zakj_customers.customers_detail_result
SELECT
acct_id, a.title, a.fname, dob, a.cr_date
FROM
zakj_customers.customers_detail a
LEFT OUTER JOIN
zakj_customers.customers_detail_backup b
ON
(a.acct_id = b.acct_id)
Where b.acct_id is null or a.title <> b.title or a.fname <> b.fname or a.cr_date <> b.cr_date;

“b.acct_id is null”是获取新记录所必需的,因为 <> 会过滤掉它们。

(插入记录时完全不需要排序。)

关于sql - 如何比较两个表并返回与 HIVE 不同的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26379409/

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