如果重要的话,与Teradata合作......
我所拥有的是重复检查,如下所示:
+---------+----------------+
| PetName | Owners |
+---------+----------------+
| Opal | Belle |
| Fuzzy | Shy |
| Angel | Shy |
| Peewee | |
| Spike | Velvet, Brilla |
+---------+----------------+
如果没有重复,则返回0行,如果有重复,则显示它们是什么。这很好,但我想要的是返回0(如果没有重复)或1如果找到重复。而已。
有什么想法吗?谢谢!
答案 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。