查询表中唯一的一列,并返回所有列

问题描述:

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

你能澄清你的问题有点:

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

对于电话号码?例如,如果两行具有相同的电子邮件地址,您是否只需要其中的一行,而您不关心哪一行?另外,请确认您使用的RDMS;一些数据库可能有不同的解决方案。只需编辑你的问题;不要在评论中回答。欢迎来到SO! – BellevueBob 2012-07-28 17:39:30

+0

你正在使用什么类型的数据库? LibreOffice是基于数据库还是仅仅是访问另一个数据库(SQL Server,MySQL,Oracle等)的前端工具? – 2012-07-28 23:24:15

+0

你的主键是什么列?你有一个自动递增的列或date_created列吗? – 2012-07-29 00:05:39

如果您使用的是支持窗口功能的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) 
+0

您的第二个查询可以正常工作,但它只返回约300行,我知道它应该返回超过10,000个唯一的电子邮件地址。 – 2012-07-28 23:06:35

+0

你是什么意思的独特的电子邮件地址?此查询返回具有完全一个记录的电子邮件地址。 – 2012-07-29 01:40:14

您可以使用此解决方案每个电子邮件只能获得一行(无论是否有重复)。该行是基于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 
+0

该代码返回与上面的sql相同数量的记录309。您认为我的数据中存在一些问题?我有超过30000条记录应该会返回超过10000个独特的电子邮件。 – 2012-07-29 00:13:22

+0

@ToddWelch,你能澄清一下:你是否只想选择电子邮件不在表中复制的行,或者你只是试图选择每行一行,而不管该电子邮件是否有其他重复项?还请解决我在问题评论中提出的问题:*您的主键列*是什么? – 2012-07-29 00:15:40

+0

我试图只选择电子邮件不在表中复制的行。例如,我想通过电子邮件向数据库中的每个人发送电子邮件,但我知道很多人都在数据库中列出了两次,因为我已经合并了来自多个不同来源的数据。 我的主键是我刚才看到的ID列,我没有在上面列出。 – 2012-07-29 00:30:33