Vertica比较表格内容

时间:2016-05-06 18:39:47

标签: sql vertica

我在Vertica中有以下两个表,列名为A,B,C,D。我列出了下面的行值

Table 1

100, Active, R, 80
200, Inactive, R, 20
300, Active, V, 50
500, Active, R, 30

Table 2

100, Active, R, 80
200, Inactive, R, 20
300, Inactive, V, 50
400, Inactive, R, 60

我想比较这两个表,只打印这两个表和行之间不同的行,这些行存在于一个表中,而不存在于另一个表中。我尝试了以下SQL,它适用于一个场景(它能够提供存在于一个而不是另一个中的行,但它不能)

select * from (select A,B,C,D from Table1 except select A,B,C,D from Table2) "T" union all select * from (A,B,C,D from Table2 except select A,B,C,D from Table1) "T";

300, Active, V, 50
300, Inactive, V, 50
500, Active, R, 30
400, Inactive, R, 60

但是当两个表中存在具有不同值的相同行时,我想只有一行:

300, Inactive, V, 50
500, Active, R, 30
400, Inactive, R, 60

1 个答案:

答案 0 :(得分:1)

我假设按行表示“A”值。

假设两个表中都没有重复项,您可以使用聚合:

select a
from ((select 1 as which, a, b, c, d from t1) union all
      (select 2 as which, a, b, c, d from t2)
     ) t
group by a
having min(b) <> max(b) or min(c) <> max(c) or min(d) <> max(d);

您可以添加其他列,具体取决于您真正想要的信息。此外,这会忽略NULL值。处理NULL的逻辑也稍微麻烦一点。