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)