2014-10-05 40 views
8

如何編寫查詢以確定列值是唯一的?SQL查詢以確定列中的值是唯一的

+0

您是否試圖確定_all_值是唯一的? – md4 2014-10-05 08:41:26

+0

是的,它是更多或者所有的列都是唯一的或不是 – JackyBoi 2014-10-05 12:02:02

+0

相關,如果不是相同的:http://stackoverflow.com/questions/6941049/how-to-find-out-whether-a-table-has-一些獨特的列 – 2014-10-05 19:58:47

回答

9

試試這個:

select case when count(distinct col1)= count(col1) 
then 'column values are unique' else 'column values are NOT unique' end 
from tbl_name; 
+2

如果您認爲沒有值爲NULL,則此方法有效。 – 2014-10-05 12:44:08

0

您是否試圖僅返回列的不同值?如果是這樣,您可以使用DISTINCT關鍵字。語法是:

SELECT DISTINCT column_name,column_name 
FROM table_name; 
+0

不是真的回來,只是確定。我也很困惑,但這是被要求的,因此想知道如何編寫這樣的查詢 – JackyBoi 2014-10-05 05:06:55

+0

您可以使用類似: 選擇 列1,列2,COUNT(*) FROM 表 GROUP BY 列1,列2 HAVING COUNT(*)> 1 並且如果返回值有任何值,那麼這些值就是非唯一值。 – 2014-10-05 05:13:21

9
select count(distinct column_name), count(column_name) 
from table_name; 

如果唯一值#等於值的總#,那麼所有的值都是唯一的。

+2

+1。我想補充說,這個解決方案不會檢測到重複的NULL值;它只適用於(非'NULL')值。 – stakx 2014-10-05 08:45:25

0

使用DISTINCT關鍵字COUNT聚合函數內部,如下圖所示:

SELECT COUNT(DISTINCT column_name) AS some_alias FROM table_name 

上面的查詢會給你不同值的數量在該列。

2
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' 

如果你想列出那些不是唯一的,只需要內部查詢並運行它。 HTH。

0

如果要檢查所有的值是唯一的你關心NULL值,然後做這樣的事情:

select (case when count(distinct column_name) = count(column_name) and 
        (count(column_name) = count(*) or count(column_name) = count(*) - 1) 
      then 'All Unique' 
      else 'Duplicates' 
     end) 
from table t; 
0

有了這個以下查詢,您不僅可以看到您的列是否是唯一的,而且還可以查看哪些組合最不唯一。此外,因爲你仍然看到頻率爲1,你的關鍵是獨特的,你知道你的結果是好的,而不是簡單地失蹤;使用HAVING子句時不太清楚。

SELECT Col1, Col2, COUNT(*) AS Freq 
FROM Table 
GROUP BY Col1, Col2 
ORDER BY Freq DESC