带有 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
【讨论】:
这仅在表中唯一的列是 [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子句