所以假设我有一个包含大约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 <> t.title then 1 Else 0 End title
我不会写只有表达到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 <> t.title or a.fname <> b.fname or a.cr_date <> b.cr_date;
“b.acct_id为null”是获取新记录所必需的<>会过滤掉它们.
(插入记录时完全没有订购.)