SQL Server 查询以检查当前数据中的唯一值组

x759pob2  于 2022-11-21  发布在  其他
关注(0)|答案(1)|浏览(230)

我尝试从数据库中的当前数据中获取具有唯一值的列 和具有唯一值的列组。
例如,对于具有唯一值的列 我有这样的疑问:

SELECT t.columnToCheck
FROM table t
WHERE EXISTS(SELECT 1 FROM table d WHERE d.t.columnToCheck = t.t.columnToCheck and d.id <> t.id)

我所做的就是检查表的每一列是否都有数据,没有结果的列就是我认为唯一的列。这对我来说是可行的。
我现在要做的是检查是否存在具有唯一值的列组。 WHERE中的1x、2x和3x不重复,我会将其视为唯一的列组。
例如:

在本例中,对于存在的数据,我们可以说name和shortname之间的组合是唯一的,因为它在任何其他列中都不重复。但是,name和email的组合不是唯一的,因为它是重复的。我需要的是从所有列中获取所有唯一的组合。
我如何检查所有这些列组合,以检查它在一个快速和容易的方式?
我已经尝试手动执行列组的一些组合,但不可能手动测试列的所有组合。

zu0ti5jz

zu0ti5jz1#

检查重复项有两种基本机制,如您所发现的WHERE NOT EXISTS

SELECT Id, column1, column2, column3 
FROM <table> src 
WHERE NOT EXISTS (
    SELECT 1 FROM <table> chk 
    WHERE src.Id <> chk.Id 
      AND src.column1 = chk.column1 
      AND src.column2 = chk.column2 
      AND src.column3 = chk.column3 
)

或者,如果您不需要特定的行,但只想知道重复的值,或者存在重复值,则可以使用GROUP BY HAVING COUNT(*) > 1

SELECT COUNT(*) as [count], column1, column2, column3
FROM <table> src 
GROUP BY column1, column2, column3
HAVING COUNT(*) > 1
  • 返回COUNT(*)并不是绝对必要的,但如果您怀疑计数将超过2,则它可能有助于分析。*

相关问题