SQL查询以确定列中的值是唯一的

Jac*_*Boi 29 sql t-sql sql-server

如何编写查询以确定列值是唯一的?

Gan*_*kar 31

试试这个:

SELECT CASE WHEN count(distinct col1)= count(col1)
THEN 'column values are unique' ELSE 'column values are NOT unique' END
FROM tbl_name;
Run Code Online (Sandbox Code Playgroud)

注意:这仅在'col1'没有数据类型'ntext'或'text'时才有效.如果您有这些数据类型之一,请使用'distinct CAST(col1 AS nvarchar(4000))'(或类似)而不是'distinct col1'.

  • 如果您假设没有值为"NULL",则此方法有效. (6认同)
  • 根据 @GordonLinoff 评论,我建议修改此答案以考虑相关列为 NULL 的记录。 (3认同)

Fuz*_*ree 19

select count(distinct column_name), count(column_name)
from table_name;
Run Code Online (Sandbox Code Playgroud)

如果唯一值的数量等于值的总数,则所有值都是唯一的.

  • +1.我想补充一点,这个解决方案不会检测到重复的`NULL`s; 它只适用于(非'NULL`)值. (5认同)

TT.*_*TT. 9

IF NOT EXISTS ( 
  SELECT
    column_name
  FROM
    your_table
  GROUP BY
    column_name
  HAVING
    COUNT(*)>1
)
  PRINT 'All are unique'
ELSE
  PRINT 'Some are not unique'
Run Code Online (Sandbox Code Playgroud)

如果要列出那些不唯一的,只需执行内部查询并运行它.HTH.


小智 8

使用以下查询,您不仅可以查看列是否唯一,还可以查看哪个组合最不唯一。此外,因为您仍然看到频率 1 是您的密钥是唯一的,所以您知道您的结果是好的,而不是例如简单地丢失;使用 HAVING 子句时,有些事情不太清楚。

SELECT Col1, Col2, COUNT(*) AS Freq
FROM Table
GROUP BY Col1, Col2
ORDER BY Freq DESC
Run Code Online (Sandbox Code Playgroud)