2011-04-10 123 views
21

如何在WHERE中使用DISTINCT子句?例如:與WHERE的DISTINCT子句

SELECT * FROM table WHERE DISTINCT email; -- email is a column name 

我想選擇具有不同電子郵件地址的表中的所有列。

+1

這是矛盾的條款。你的意思是「選擇電子郵件是唯一的所有列」? – 2011-04-10 08:19:06

+0

@adam: - 是的! – Mohit 2011-04-10 08:20:05

+0

好的,回答了你的問題。 – 2011-04-10 08:21:00

回答

3

可以由:

SELECT DISTINCT email,id FROM table where id='2'; 
+0

@Mohit:你想說什麼?請詳細說明一下? – 2011-04-10 08:24:01

+1

我想選擇所有具有唯一電子郵件並且id ='2'的行; – Mohit 2011-04-10 08:25:16

+0

電子郵件和身份證是我的表中的兩列 – Mohit 2011-04-10 08:26:07

21

如果你的意思是其電子郵件是獨一無二的所有列:

SELECT * FROM table WHERE email in 
    (SELECT email FROM table GROUP BY email HAVING COUNT(email)=1); 
+0

如果我編寫'SELECT * FROM表中的電子郵件地址(從表中選擇不同的電子郵件)',它是錯誤的嗎? – Ravi 2013-07-24 10:54:09

+0

@jWeaver ...即使我最初在想你在想什麼。但是,嘗試執行查詢。這是錯誤的。 – Vikram 2013-08-26 16:16:06

+0

那麼,子查詢究竟如何工作呢? – Delfino 2017-09-20 14:01:41

3
select t1.* 
from YourTable as t1 
    inner join 
    (select email 
    from YourTable 
    group by email 
    having count(email) = 1) as t2 
    on t1.email = t2.email 
0

您可以使用ROW_NUMBER()。您也可以指定條件。 (例如Name LIKE'MyName%在下面的查詢)

SELECT * 
FROM (SELECT ID, Name, Email, 
      ROW_NUMBER() OVER (PARTITION BY Email ORDER BY ID) AS RowNumber 
    FROM MyTable 
    WHERE Name LIKE 'MyName%') AS a 
WHERE a.RowNumber = 1 
0

一個簡單的查詢將做到這一點:

SELECT * 
FROM table 
GROUP BY email 
HAVING COUNT(*) = 1; 
+0

該操作沒有指定SQL的風格,但該命令不會在SQL Server中運行,並在MySQL中產生不明確的結果。 – 2017-03-27 16:06:16

0

這是不是工作:

SELECT email FROM table1 t1 
      where UNIQUE(SELECT * FROM table1 t2); 
+0

我不知道有很多DBMS已經實現了UNIQUE謂詞。你在使用哪一個?另外,我認爲你向後查詢了:不應該將'SELECT email'包裝在'UNIQUE()'謂詞中?我認爲你需要某種連接子句('FROM table1 t2 WHERE t2.email = t1.email')。 – JDB 2016-08-20 03:45:27

-1

查詢:

Select *, (Select distinct email) from Table1 
1

您可以使用HAVING條款。

SELECT * 
FROM tab_name 
GROUP BY email_id 
HAVING COUNT(*) = 1;