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


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 列,我没有在上面列出。

您可以使用

此解决方案仅获取每封电子邮件的一行(无论它是否有重复项(。该行基于每封电子邮件的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

如果您使用的是支持窗口函数的 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)

最新更新