返回0或1表示SQL重复查询

时间:2017-06-28 21:56:46

标签: sql teradata

如果重要的话,与Teradata合作......

我所拥有的是重复检查,如下所示:

+---------+----------------+
| PetName |     Owners     |
+---------+----------------+
| Opal    | Belle          |
| Fuzzy   | Shy            |
| Angel   | Shy            |
| Peewee  |                |
| Spike   | Velvet, Brilla |
+---------+----------------+

如果没有重复,则返回0行,如果有重复,则显示它们是什么。这很好,但我想要的是返回0(如果没有重复)或1如果找到重复。而已。

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:2)

我认为最简单的方法是case

select (case when count(id) = count(distinct id) then 0 else 1 end)
from tbl_a;

注意:当它具有NULL值时,它会忽略id。如果您需要考虑到这一点,可以很容易地修改查询。

答案 1 :(得分:1)

如果有多列密钥,则无法使用Gordon的apporach,因为聚合函数仅适用于单个列。

可能的解决方法是将这些列合并为一个这样的

COUNT(column1 || column2 || column3)

但它可能效率不高。

否则,您需要使用派生表添加另一个COUNT:

select case when count(*) = 0 then 0 else 1 end
from
 (
   SELECT column1, column2, column3, COUNT(*)
   FROM TBL_A
   GROUP BY 1,2,3
   HAVING COUNT(*) > 1
) as dt

您应该比较资源使用情况,对于单列,应该类似于COUNT(DISTINCT ID),但对于多列,应该类似于较少的CPU。