2011-04-10 102 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;