重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【解消】通知が届かない不具合について

以下のようなテーブルからmailが重複していてnameの値が全て同じ値を持つレコードを取得するためのSQL文を教えてください。

mail | name
-----------
aaa | 01
aaa | 01
aaa | 01
bbb | 02
bbb | 02
bbb | 01
ccc | 01
ccc | 01
ccc | 02

select * from test
where mail in
(select mail from test where mail group by mail having count(mail)>1)

上記のSQL文だと以下のデータが取得されてしまいます。

mail | name
-----------
aaa | 01 ○
aaa | 01 ○
aaa | 01 ○
bbb | 02 ×
bbb | 02 ×
ccc | 01 ×
ccc | 01 ×

○印のみ取得したいのですが、
SQL文をどのように修正すればよいのでしょうか。
よろしくお願いいたします。

A 回答 (3件)

RDBMS名とバージョンは?



重複データを何件も持つ意味があるのですか?

例えば、下記SQLでは、2列とも重複するデータを1回だけ表示します。同じデータを件数分表示する必要があるのですか?

【SQL例】
select mail,max(name) as name
from (select mail,name
from test
group by mail,name) as x
group by x.mail
having count(*)=1;

この回答への補足

>RDBMS名とバージョンは?
HSQLDBを使用しております。
>重複データを何件も持つ意味があるのですか?
mail | name
-----------
aaa | 01
このような結果がでるようにしたいと思っています。
また、nameの01は値を指定したいです。

補足日時:2007/01/26 15:35
    • good
    • 0
この回答へのお礼

参考にさせていただきました。
無事解決しました。
ありがとうございました。

お礼日時:2007/01/30 14:05

>また、nameの01は値を指定したいです。



どういう意味でしょうか?
検索条件に指定したいという意味ですか?

具体例を説明できますか?

この回答への補足

はい。
name='01'を検索条件に入れることは可能でしょうか?

補足日時:2007/01/29 10:18
    • good
    • 0

>mailが重複していて


重複していないものは除外ですよね。

select * from test
where mail in
(
SELECT Q2.mail
FROM
(
SELECT T1.mail, T1.name
FROM test AS T1 INNER JOIN
(
SELECT T0.mail
FROM test AS T0
GROUP BY T0.mail
HAVING count(*) > 1
) AS Q1
ON T1.mail = Q1.mail
GROUP BY T1.mail, T1.name
) AS Q2
GROUP BY Q2.mail
HAVING count(*) = 1
);

長いですが、これで求まりました。(Access2000で確認)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
参考にさせていただきました!

お礼日時:2007/01/30 14:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す