我必须找出两个表中的数据对于给定的view_date是否相同。如果我的SQL应该返回零,否则为非零。
Table1/Table2 columns:
Source
view_date
count
start_date
end_date
我尝试了以下方式:
SELECT *
FROM (
SELECT count(*)
FROM table1
) a
JOIN (
SELECT count(*)
FROM TABLE 2
) b
WHERE view_date = '05/08/2016'
AND a.x != b.y;
但我没有得到预期的结果。有人可以帮助我吗?
答案 0 :(得分:1)
这是一种计算每个表中唯一的行数的方法:
select count(*)
from (select source, count, start_date, end_date,
min(which) as minwhich, max(which) as maxwhich
from ((select source, count, start_date, end_date, 1 as which
from table1
where viewdate = '2016-06-08'
) union all
(select source, count, start_date, end_date, 2 as which
from table2
where viewdate = '2016-06-08'
)
) t12
group by source, count, start_date, end_date
having minwhich = maxwhich
) t;
注意:如果行在表中的所有值中重复,则不会检查每个表中是否存在相同数量的重复项。
答案 1 :(得分:0)
要对2个表进行完全比较,您不仅需要确保行数匹配,还必须检查所有行的所有数据中的所有数据是否匹配!
这可能是一个复杂的问题(当我在Hortonworks工作时,对于一个项目,我们开发了3个不同的程序来试图解决这个问题)。最近我有机会开发出一个以优雅高效的方式解决这个问题的程序:https://github.com/bolcom/hive_compared_bq
该程序会显示网页上的差异(如果您不需要,可以跳过这些内容),并且还会给出返回值0/1,这是您目前想要的。