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