带有 WHERE 的 DISTINCT 子句

Posted

技术标签:

【中文标题】带有 WHERE 的 DISTINCT 子句【英文标题】:DISTINCT clause with WHERE 【发布时间】:2011-08-02 09:41:41 【问题描述】:

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

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

我想从具有不同电子邮件地址的表中选择所有列。

【问题讨论】:

用词自相矛盾。您的意思是“选择电子邮件唯一的所有列”吗? 查看更新的查询意味着我已在解决您的问题的答案中更新了我的查询。 【参考方案1】:

SELECT DISTINCT dbo.Table.Email,dbo.Table.FirstName dbo.Table.LastName, dbo.Table.DateOfBirth (etc) FROM dbo.Table.Contacts WHERE Email = 'name@email';

【讨论】:

【参考方案2】:

试试:

SELECT * FROM table GROUP BY email

这将返回具有唯一电子邮件的所有行,该电子邮件由第一个 ID 出现(如果有意义的话) 我认为这就是您正在寻找的内容,因为我有同样的问题,但这些答案都没有为我工作。

【讨论】:

这仅在表中唯一的列是 [email] 时才有效,因为只有来自 GROUP BY 条件或聚合的列可能在 SELECT 列表中【参考方案3】:

如果您的表中有一个唯一列(例如 tableid),那么试试这个。

SELECT EMAIL FROM TABLE WHERE TABLEID IN 
(SELECT MAX(TABLEID), EMAIL FROM TABLE GROUP BY EMAIL)

【讨论】:

【参考方案4】:

简单查询此查询从表中选择电子邮件唯一的所有记录:

select distinct email,* from table_name

【讨论】:

【参考方案5】:

您可以使用HAVING 子句。

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

【讨论】:

【参考方案6】:

查询:

Select *, (Select distinct email) from Table1

【讨论】:

【参考方案7】:

这不可行吗:

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

【讨论】:

我不知道有很多 DBMS 已经实现了 UNIQUE 谓词。你用的是哪一个?另外,我认为您的查询是倒退的:SELECT email 不应该包含在 UNIQUE() 谓词中吗?而且我认为您需要某种连接子句 (FROM table1 t2 WHERE t2.email = t1.email)。【参考方案8】:

一个简单的查询就可以做到:

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

【讨论】:

op 没有指定 SQL 的风格,但是这个命令不会在 SQL Server 中运行,并且在 mysql 中会产生模棱两可的结果。【参考方案9】:

可能是:

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

【讨论】:

@Mohit:你想说什么?请详细说明? 我想选择所有具有唯一电子邮件且 id='2' 的行; email 和 id 是我表中的两列 我不想更新,我只想从我的表中选择行!具有唯一的电子邮件并具有 id='2';例如: - SELECT * FROM TABLE WHERE DISTINCT (email) AND id='2';我知道上面的查询是错误的,但我只想做上面查询中的事情 @Mohit:查看更新的查询意味着我已经在解决您的问题的答案中更新了我的查询。【参考方案10】:

您可以使用 ROW_NUMBER()。您也可以指定 where 条件。 (例如以下查询中的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

【讨论】:

【参考方案11】:
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   

【讨论】:

【参考方案12】:

如果您指的是电子邮件唯一的所有列:

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

【讨论】:

SELECT * FROM table where email in(select distinct email from table)有错吗? @jWeaver...即使我最初也在想你在想什么。但是,尝试执行查询。这是错误的。 @Delfino a GROUP BY 根据电子邮件字符串对结果集进行分区,并应用HAVING 来决定返回哪些分区。子查询仅返回其中包含单行的分区,即唯一邮件。

以上是关于带有 WHERE 的 DISTINCT 子句的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 中使用带有 GROUP BY 子句的 COUNT(DISTINCT 字段)

Oracle-18-select语句初步&SQL中用算术表达式&别名的使用&连接运算符%distinct&where子句

数据查询

在子查询中续集“WHERE”子句

查询五子句

带有 WHERE 子句的 UNION