質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

5回答

6053閲覧

重複したレコードのみ抽出したい

leoairen

総合スコア122

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2016/07/14 02:57

重複したレコードのみ抽出したく下記のように書きましたが一行しか出ませんでした。目で追うと100行以上の重複レコードがあります。

SQL

1 2SELECT 3a 4FROM 5table 6HAVING COUNT(a) > 1 7

下記のような書き方も試しましたがうまくいきません。どなたか教えて頂けますでしょうか。

SQL

1 2SELECT a 3FROM table 4WHERE a IN (SELECT a FROM table GROUP BY a HAVING count(a) > 1); 5

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kutsulog

2016/07/14 04:22 編集

1番目のSQLは本当にこれがすべてでしょうか? 2番目に比べてGROUP BYが抜けているようです。 2番目のSQLでうまくいかないといっているのは どのような結果を期待しているところへどのような結果が出たのでしょうか? また、データが一意となるようなカラムはありますか?
guest

回答5

0

動作テストしていませんが、こんな感じに書けそうに思います。

SQL

1SELECT 2 table.a 3FROM 4 table 5 LEFT JOIN ( 6 SELECT 7 a, 8 count(a) AS count_a 9 FROM 10 table 11 GROUP BY 12 a 13 ) T ON table.a = T.a AND T.count_a > 1 14

投稿2016/07/14 04:32

kaz.Suenaga

総合スコア2037

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

leoairen

2016/07/14 07:54

ご回答、ありがとうございます。kutsulogさんのご回答でできました。ありがとうございました。
guest

0

ベストアンサー

  • INを使わない
  • 重複しているものをすべて出す
  • 一意に特定するキーはない

以上のような条件でしたら
以下のSQLではいかがでしょう?

SQL

1SELECT * 2FROM table TBL_A 3WHERE EXISTS( 4 SELECT 1 5 FROM table TBL_B 6 WHERE TBL_B.a = TBL_A.a 7 GROUP BY a 8 HAVING COUNT(a) > 1 9)

よく考えたらこれでいけますね

SQL

1SELECT * 2FROM table TBL_A 3WHERE EXISTS( 4 SELECT 1 5 FROM table TBL_B 6 WHERE TBL_B.a = TBL_A.a 7 HAVING COUNT(*) > 1 8)

投稿2016/07/14 04:26

編集2016/07/14 09:06
kutsulog

総合スコア985

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

leoairen

2016/07/14 07:49

ご回答いただき、ありがとうございます。できました。WHERE EXISTSの書き方はまったく知りませんでした。同じカラムであっても仮想のTBL_AとTBL_Bを作って重複データを抽出する方法という理解でよろしいでしょうか。
kutsulog

2016/07/14 09:10

データ取得用のTBL_Aと重複チェック用のTBL_Bを別名で作って カラムaでTBL_Aと同じ値をもつデータがTBL_Bで複数レコードあるかを確認する感じですね 無駄に複雑になっていたので単純にしました
leoairen

2016/07/14 10:22

ご回答いただき、ありがとうございます。大変勉強になりました。ありがとうございました。
guest

0

カラムを指定して重複検索の場合、私は以下で取得しました。

select * from table group by column HAVING COUNT( column) > 1;

投稿2016/07/14 03:38

some_5656

総合スコア44

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

leoairen

2016/07/14 07:50

ご回答、ありがとうございます。kutsulogさんのご回答でできました。ありがとうございました。
guest

0

2番めの処理でいけませんか?

SELECT * FROM tbl WHERE a in (SELECT a FROM tbl group by a having count(*)>1);

投稿2016/07/14 03:20

yambejp

総合スコア114777

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

leoairen

2016/07/14 04:17

ご回答、ありがとうございます。GROUP BY を使うとたとえば、aカラムに数値が1のカラムが3つあるとして、そのうちの一つしかでないのです。三つを全部出したいので、どう修正すればよいでしょうか。また、navicatを使っていますが、WHERE inを使うとすごく負荷が大きいみたいで、なかなか処理が終わりません。
leoairen

2016/07/14 07:50

ご回答、ありがとうございます。kutsulogさんのご回答でできました。ありがとうございました。
guest

0

SELECTの結果が0件の場合取得できないので、1件じゃなければ重複しているということになります。
なのでこうですね。

SQL

1SELECT `a` FROM `table` GROUP BY `a` HAVING COUNT(`a`) <> 1

全てのカラムを取得したい場合はこうですね。

SQL

1SELECT * FROM `table` GROUP BY `a` HAVING COUNT(`a`) <> 1

投稿2016/07/14 03:02

編集2016/07/14 04:43
Yasha_Wedyue

総合スコア830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

leoairen

2016/07/14 04:12

ご回答、ありがとうございます。GROUP BY を使うとたとえば、aカラムに数値が1のカラムが3つあるとして、そのうちの一つしかでないのです。三つを全部出したいので、どう修正すればよいでしょうか。
Yasha_Wedyue

2016/07/14 04:17

SELECT `a`の部分を取得したいカラムにすればGROUP BYでまとめても問題無いですよ。 ↑のSQLもSELECT *にすれば全部のカラムが取れます。
leoairen

2016/07/14 07:50

ご回答、ありがとうございます。kutsulogさんのご回答でできました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問