-1
table_name
-----------------
ID [PK]
Title 
Last_Name 
First_Name 
Middle_Name 
Suffix 
Full_Address 
Address1 
Address2 
City 
State 
Zip 
County 
Phone1 
Phone2 
Email

上記の列名を持つテーブルがあります。「メール」が一意であるクエリで、すべての列とすべての行を返すことができるようにしたいと考えています。SQLでこれを行うにはどうすればよいですか?

2 つの行に同じ電子メール アドレスがある場合、それらの行の 1 つだけを返す必要があります。どちらでもかまいません。行を組み合わせることができれば、それは必要ありません。

HSQL データベース エンジンを使用する .odb データベースである LibreOffice Base を使用しています。

メールがテーブルで重複していない行のみを選択しようとしています。たとえば、データベース内のすべての人にメールを送信したいのですが、複数の異なるソースからのデータを組み合わせたために、多くの人がデータベースに 2 回リストされていることがわかっています。

私の主キーは、上にリストしなかった ID 列です。

4

2 に答える 2

1

このソリューションを使用して、電子メールごとに 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
于 2012-07-28T17:54:51.900 に答える
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)
于 2012-07-28T17:38:36.420 に答える