2012-07-28 123 views
0
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

回答

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) 
+0

您的第二個查詢可以正常工作,但它只返回約300行,我知道它應該返回超過10,000個唯一的電子郵件地址。 – 2012-07-28 23:06:35

+0

你是什麼意思的獨特的電子郵件地址?此查詢返回具有完全一個記錄的電子郵件地址。 – 2012-07-29 01:40:14

1

您可以使用此解決方案每個電子郵件只能獲得一行(無論是否有重複)。該行是基於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

相關問題