为 SQL 重复查询返回 0 或 1

Returning 0 or 1 for a SQL duplicate query

如果重要的话,使用 Teradata...

我有一个重复检查,看起来像这样:

SELECT ID, COUNT(*)
FROM TBL_A
HAVING COUNT(*) > 1
GROUP BY ID;

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

有什么想法吗?谢谢!

我认为最简单的方法是 case:

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

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

如果存在多列键,则不能使用 Gordon 的方法,因为聚合函数仅适用于单个列。

一种可能的解决方法是像这样将这些列组合成一个

COUNT(column1 || column2 || column3)

但它可能不是很有效。

否则您需要使用 Derived Table:

添加另一个 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。