2010-10-02 60 views
3

什麼是SQL命令,用於檢查行中沒有重複字段的行。只選擇具有唯一字段的行

例如:

A A A B B B不應該在結果表。

A B C D E F

只有行即等給出的數據:

A A A B B B 

A B C D E F 

A A B G H Q 

應該返回A B C D E F

+0

編輯以下工作。我只是在尋找一個單行命令,如果存在的話。 – AnEventHorizon 2010-10-02 20:43:23

+0

謝謝,但它們是單列中的值還是分佈在多列中? – 2010-10-02 20:56:02

+0

每個字母都屬於一列。 – AnEventHorizon 2010-10-02 21:06:02

回答

2

Select distinc *返回唯一行的字段不是唯一的值。 您應該將每列的值與其他值進行比較。 (假設列類型相同)。例如,對於一個4列的表格,你應該做的smoething像:

SELECT Col1, Col2, Col3, Col4 FROM MyTable WHERE 
    Col1 NOT IN (Col2,Col3,Col4) AND 
    Col2 NOT IN (Col3,Col4) AND 
    Col3 <> Col4 
+1

可能更容易使用SELECT Col1,Col2,Col3,Col4 FROM MyTable WHERE Col1 IN(Col2,Col3,...)和Col2 IN(Col1,Col3,...)... – 2010-10-02 20:33:33

+0

是的,這是正確的。但我不想要這個,因爲它有很多代碼麻煩。我在問是否有一個SQL命令檢查你的表在行中的唯一性並返回它。 – AnEventHorizon 2010-10-02 20:34:00

+0

同意。只需將其更改爲:WHERE Col1 ** NOT ** IN(Col2,Col3,...) – Kamyar 2010-10-02 20:34:36

0
SELECT DISTINCT * FROM tablename 
0

SELECT DISTINCT col FROM tabl

+0

不,這將仍然返回具有重複值IN THEM的行。我希望DISTINCT值在行中,而不是表中。 – AnEventHorizon 2010-10-02 20:27:59

+4

保持使用封蓋使文本更易讀。哦,等一下,沒有。 – 2010-10-02 20:29:29

+0

這就是所謂的強調。 – AnEventHorizon 2010-10-02 20:30:39

-1

SELECT * FROM MYTABLE

WHERE mytable.col1!= mytable.col2!= mytable.col3 ...

+0

此查詢不會運行。您必須逐一比較值。你也應該用<>代替!= – Kamyar 2010-10-02 20:32:08

+0

這只是原理。真正的實現取決於OP DB服務器。你爲什麼認爲!=是錯誤的。對於AND條款,我同意。 – kofucii 2010-10-02 20:34:51

3

有沒有簡單的命令來做到這一點。

似乎是一個不尋常的要求,並可能表明,如果所有列都可以互換,表格不是第一範式。

在Microsoft SQL Server

;With YourData AS 
(
select 'A' as C1, 'A' as C2, 'A' as C3, 'B' as C4, 'B' as C5, 'B' as C6 UNION ALL 
select 'A' as C1, 'B' as C2, 'C' as C3, 'D' as C4, 'E' as C5, 'F' as C6 
) 
SELECT * 
FROM YourData 
WHERE 1 = 
     (SELECT TOP 1 COUNT(*) AS Cnt 
     FROM  ( 
       SELECT C1 AS  C 
       UNION ALL 
       SELECT C2 
       UNION ALL 
       SELECT C3 
       UNION ALL 
       SELECT C4 
       UNION ALL 
       SELECT C5 
       UNION ALL 
       SELECT C6 
       ) D 
     GROUP BY C 
     ORDER BY Cnt DESC 
     ) 
+0

+1表格必須標準化。用這種方式查詢的好工作;) – MartinodF 2010-10-02 21:32:42

相關問題