在一列上查询表的唯一性并返回所有列

时间:2012-07-28 17:32:11

标签: sql unique

table_name
-----------------
ID [PK]
Title 
Last_Name 
First_Name 
Middle_Name 
Suffix 
Full_Address 
Address1 
Address2 
City 
State 
Zip 
County 
Phone1 
Phone2 
Email

我有一个包含上述列名的表。我希望能够在“电子邮件”唯一的查询中返回所有列和所有行。我将如何使用SQL执行此操作?

如果两行具有相同的电子邮件地址,那么我只想要返回其中一行。哪个并不重要。如果我可以合并那些不太必要的行。

我使用的是LibreOffice Base,它是一个使用HSQL数据库引擎的.odb数据库。

我正在尝试仅选择其电子邮件未在表格中重复的行。一个例子是我想通过电子邮件发送数据库中的每个人,但我知道很多人在数据库中列出了两次,因为我已经汇总了来自几个不同来源的数据。

我的主键是我刚刚看到的ID列,我没有在上面列出。

2 个答案:

答案 0 :(得分:1)

您可以使用此解决方案为每封电子邮件只获取一行(无论它是否有重复项)。该行基于每封电子邮件的ID的最大值:

SELECT b.*
FROM   (SELECT MAX(ID) AS ID FROM table_name GROUP BY Email) a
JOIN   table_name b ON a.ID = b.ID

电话号码:

SELECT b.*
FROM   (SELECT MAX(ID) AS ID FROM table_name GROUP BY Phone1) a
JOIN   table_name b ON a.ID = b.ID

答案 1 :(得分:0)

如果您使用的是支持窗口函数的SQL引擎,那么您可以这样做:

select Title Last_Name, First_Name, Middle_Name, Suffix, Full_Address, Address1,
       Address2, City, State, Zip, County, Phone1, Phone2, Email
from (select t.*, count(*) over (partition by email) as NumOnEmail
      from t
     ) t
where NumOnEmail = 1

在任何数据库中,您都应该能够:

select Title Last_Name, First_Name, Middle_Name, Suffix, Full_Address, Address1,
       Address2, City, State, Zip, County, Phone1, Phone2, Email
from t
where t.email in (select email from t group by email having count(*) = 1)