- ベストアンサー
重複したデータのみを取得する方法
重複するデータを取り除くのはDISTINCTで出来ると 思いますが、重複したデータのみを取得できるような SELECT句を教えて頂けないでしょうか? お手数では御座いますが、ご教授お願い致します。
- fcinvin
- お礼率75% (6/8)
- Visual Basic
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
前置きとして。。。 テーブル構造にもよるので、一概に「これがベスト」とは言えません。 また、「重複データを見つける」ということから、キー項目ではないと推察いたします。 それとSQL系の質問をするのであれば、使用しているDB種ぐらいは書きましょう。 「取り除くのはDISTINCTで出来る」そのDISTINCTで指定しているカラムは、一つ?それとも複数? 本題 もし日常業務用の機能でなければ → グループ化してカウントを取る ※1.重複を省く基本 SELECT DISTINCT カラム1, カラム2 FROM テーブル ※2.重複を省く基本を改造 SELECT カラム1, カラム2 FROM テーブル GROUP BY カラム1, カラム2 ※3.重複が存在するデータを抽出 SELECT カラム1, カラム2 FROM テーブル GROUP BY カラム1, カラム2 HAVING カラム3 > 1 ここまでしたら、カラム1, カラム2が重複しているデータのクエリ化を計れます。 あとはこのクエリを、ベースのテーブルとJOINなどの連結させて、存在するものだけに抽出してもよし。 WHERE句に組み込んで、Existを利用してもよし。 ここら辺は、DB種類によっての方言があるので、SQL文は書けません。 やはり、SQLを質問するのであれば、 ・DB種 ・現在、省くときのDISTINCTを利用した例文 ・テーブル構造 は必須です。 もし日常業務用の機能であれば → 明らかにパフォーマンスをがた落ちさせる機能となるので、設計し直しをお勧めします
その他の回答 (1)
- Kuppycat
- ベストアンサー率50% (109/216)
SQLの分野ですのでカテゴリ変えたほうがよいかと。 データベースの環境によっても命令が変わってくるので、その辺詳しく書いていただけるとありがたいです。 SELECTですが、基本的にはUNIONを使ったりします。
お礼
ご教授有難う御座いました。 こういうご質問をさせて頂く時はもっと詳しい説明を書くべきですね。申し訳ありませんでした。
関連するQ&A
- SQL 複数のテーブルから重複なしでデータを取得
同じフィールド名[名前]を持つテーブルが複数個あります。 仮にテーブル名を、A、B、C、Dの4個だとします。 それらのテーブルから、フィールド名[名前]のデータを重複なしで取得したいのですが、SQL文が思いつきません。 取得するフィールドは[名前]だけです。 select distinct(名前) from A union select distinct(名前) from B union select distinct(名前) from C union select distinct(名前) from D だと、各表に同じ名前が存在する場合は結果も重複してしまい、期待する結果が得られませんでした。 環境はOracle 9iです。 SQL文を教えてください。よろしくお願いします。
- 締切済み
- Oracle
- accessクエリでのデータ重複について
お世話になります。 ACCESSクエリにてデータが重複してしまします。 SQL表示にて、SELECTの後、DISTINCTやDISTINCTROWを 加えましたが、それでも重複してしまいます。 何故なのでしょうか。 どなたか良い解決方法をお教え頂きたく宜しくお願い 致します。
- ベストアンサー
- Visual Basic
- 重複しているデータを取得したい
[TBL_TEMP] ID 年月1 年月2 項目A 項目B -------------------------------------------- 1 200909 200910 aaaa bbbb 2 200807 200809 aaaa bbbb 3 200909 200910 aaaa bbbb 4 200909 200909 aaaa bbbb 5 200807 200809 aaaa bbbb 上記のようなデータがあり、年月1と年月2でグルーピングして、重複しているデータを抽出する場合は、以下のSQLでデータを取得できます。 SELECT MIN(ID),年月1,年月2 FROM TBL_TEMP GROUP BY 年月1,年月2 HAVING COUNT(1) >= 2 上記のSQLの場合、重複データの中でIDが一番小さいもののみが取得されるため、ID=1、2の2データが取得できます。 これを重複データ全件、つまり、ID=1,2,3,5のデータを取得するには、SQLをどのように書けばよいのかがわかりません。 どなたかアドバイスを頂けないでしょうか? よろしくお願いいたします。
- ベストアンサー
- Oracle
- 複数のテーブルからデータを取得したい
1つのテーブルから重複したデータを取り除いて表示するときに使う 【select distinct カラム名 from テーブル名;】 がありますよね。 それと同じようなことを複数のテーブルをまたいで行いたいのですがうまくいきません。 ちなみに両方のテーブルのカラム名は同じです。 【select distinct カラム名 from テーブル1 union select distinct カラム名 from テーブル2;】 としても重複を取り除いた後にテーブルを結合してるので結果的に両テーブルの重複した値を取り除くことができず。 そこで 【select distinct T1.カラム名, T2.カラム名 from テーブル1 T1. テーブル2 T2;】 としてみたのですが、クエリを実行中のまま反応がないので悩んでます。 ちなみに2つのテーブルのデータはそれぞれ2万件ほどです。 こういう時どういうsql文を組むのが正しいのでしょうか?
- ベストアンサー
- MySQL
- 重複を除いた結果が欲しい
重複を除いた結果が欲しいのですが、 DISTINCTだと取得する全てのカラムの内容が一致すると重複と言う扱いになってしまいます。 複数のカラムデータを取得する場合でも、指定したカラムデータが重複したら除くようにしたいのですが、スマートな構文はないでしょうか?
- ベストアンサー
- MySQL
- 重複をせずに2つのフィールドを取得
id name points ----------- 1 aa 20 2 bb 10 3 bb 20 4 cc 10 5 bb 30 このデータベースから、nameの重複を避けて、pointsの最大値を取得して name points ----------- aa 20 bb 30 cc 10 を得たくて select distinct name points from mytable where id > 0 order by name を思いつきましたが、これではだめでした。 SQL文を教えてください。
- 締切済み
- MySQL
- Accessのフィルタ検索でデータの重複除外をしたい
OS:winowsXP Access Version:2000 お世話になります。表題の件でお伺いしたいのですが、重複 データが表示されてしまって困っています。 行いたいことは、Accessのテーブルのフィルタ画面にて TBL(userm)の中の企業ID(kigyo_id)という項目から 重複したのを排除して表示するということです。 in (select distinct kigyo_id from userm) と記述してフィルタを実行しても、重複データが表示されてしまいます。 色々調べてgroup byも試してみましたが表示されません。 どなたかご教授願えませんでしょうか?
- 締切済み
- その他(データベース)
- アクセス97で重複データを見つけたい
アクセス97を使用しています。 テーブルの重複したデータを取得する方法はあるでしょうか? 取得して区別を付けたいのです。 例えば、下記のようなデータにチェックを付けたいのです。 データ チェック欄 1 ○ 2 × 2 × 3 ○ 4 ○ 5 × 5 × 7 ○ クエリー又はSQLで実施したのですが可能でしょうか? 例えば 該当テーブルをデータをソートしてSELECTし 自データと次データの比較を全件行う ことを繰り返す。 という方法しかないのでしょうか?
- ベストアンサー
- オフィス系ソフト
お礼
ご教授有難う御座いました。 ご指摘頂きました通り、DB名をきちんと入れておく べきでした。申し訳ありません。 ちなみに今更ですが、DBはOracle10gでした。 なんとかご教授頂いた内容で出来そうです。 お手数をお掛けいたしました。 有難う御座います。