• ベストアンサー

重複データの一方を削除するSQLは?

2つのテーブルを1つにするとき、 2つのテーブルに同じデータが含まれていたため、 重複データが、いくつか出来てしまいました。 まったく同じものです。 新しく出来たテーブルから、 同じものを、検索して、 一方を削除したいのですが、 どのような方法が、可能でしょうか。 (そもそも、重複となるデータを除いて、 2つのテーブルをひとつにする方法は、 あるでしょうか。) よろしくお願いします。 ちなみに、データベースはAccessです。

  • rheda
  • お礼率69% (257/372)

質問者が選んだベストアンサー

  • ベストアンサー
  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.1

重複といってもいろんなケースが考えられますね 全フィールドの内容が全く同じものなら 集計クエリあるいは固有のレコードを抽出するクエリ をテーブル作成クエリに変えて新しいテーブルを作ればいいでしょう 中身が異なるフィールドがある場合はどれを残すのかの規則が必要です

rheda
質問者

お礼

回答ありがとうございます。 (回答メール届かなかったので、 遅れてしまいました。) 集計クエリを使う方法でも、やってみたいと思います。 経験者の貴重な意見、非常に参考になります。 ありがとうございました。

その他の回答 (4)

noname#60992
noname#60992
回答No.5

パフォーマンスは悪いかもしれませんが、 考えやすい方法としては、 すべてのフィールドのデータが同じものについては、 1レコードだけは残したい、ということであれば すべてのフィールドでグループ化したクエリで、 テーブル作成すればよいのではないでしょうか?

rheda
質問者

お礼

回答ありがとうございます。 (回答メール届かなかったので、 遅れてしまいました。) #1の方と同じ方法ですね。 オーソドックスだと、この方法なの かもしれません。 ぜひやってみたいと思います。 どうもありがとうございました。

noname#246547
noname#246547
回答No.4

>一方を削除したいのですが テーブルAからテーブルBに含まれるものを消したい delete from A where EXISTS (select * from B where B.キー項目 = A.キー項目) >そもそも、重複となるデータを除いて、 >2つのテーブルをひとつにする方法 insert into A select * from B where NOT EXISTS (select * from A where A.キー項目 = B.キー項目) accessの環境が無いので参考程度で。

rheda
質問者

お礼

回答ありがとうございます。 (回答メール届かなかったので、 遅れてしまいました。) 自分でもいろいろ考えましたが、 経験者の意見は、非常に参考になります。 2つのSQL両方試してみたいと思います。 勉強になりました。 ありがとうございました。

回答No.3

#2です。 あ、テーブルの作成方法ではなくて、もう出来たテーブルから重複したデータの削除ですね(^-^;) まずは、新しく作成したテーブル(重複したデータがあるテーブル)に キーとなる列を追加する必要があると思います。 (名前はIDとかでオートナンバー型でいいと思います) そして、 DELETE * FROM ABCテーブル WHERE ID IN (SELECT MAX(ID) FROM ABCテーブル GROUP BY ID以外の列を指定 HAVING COUNT(*) > 1); っで、いけると思います。 最後に追加した列(ID)を削除する。 念のため、重複行がないか確認してください。

rheda
質問者

お礼

回答ありがとうございます。 (回答メール届かなかったので、 遅れてしまいました。) テーブルの作成でも、間に合います。 No2の方法は、Accessならではで、 やってみようと思います。 No3のSQLも意味をよく理解してから、 やってみたいと思います。 どうもありがとうございました。

回答No.2

DBとデータ量によって、やり方は違ってくると思いますが 私が最初に思いつくのが、SQLでサブクエリを使いINSERT文で移行する方法ですね。 ですが、今回はAccessということですし、2つのテーブルは全く同じ項目ではないかと思います。 ・Access ・2つのテーブルは全く同じ ということで、以下の方法が簡単なのではないでしょうか。 (PC性能にもよりますが、データ量が数千件・数万件の場合) テーブルA テーブルB テーブルY(新テーブル) 1、新テーブルYの項目全てにキーを張る。 2、テーブルAをコピーしてテーブルYへ貼り付ける。 3、テーブルBをコピーしてテーブルYへ貼り付ける。 ※テーブルBを貼り付けた時に、キーが設定されているので重複がある様だったら、貼り付けエラーになるので重複データは張り付かない。 勉強の為にSQL文を書きたいのであれば、サブクエリーとEXISTSで検索すればヒントになるかもしれません。

関連するQ&A

  • Accessで重複データの削除について

    初歩的かもしれないですが、テーブルにおいて、重複データがある場合の削除の仕方を教えてください。 例えば下記のようなデータの入っているテーブルがあるとします。 [年度] [氏名] [日付1] [日付2] 2001 一郎   1/1 3/1 2001 次郎 1/2 2001 三郎 1/2 2001 三郎 1/2 3/1 2002 一郎 4/2 2002 一郎 4/2 7/1 このテーブルで[年度]と[氏名]と[日付1]がダブっているレコードの一方を削除したいのです。ダブった2レコードで消す方のレコードは[日付2]の入っていない方を削除します。 どうすればよいか分かりません。。教えてください。 よろしくお願いします。 (Accessのバージョンは2000です。)

  • Accessで重複したデータを削除したい。

    AテーブルとBテーブルがあります。AテーブルとBテーブルのフィールド名は同じですがデータはそれぞれ違います。AテーブルとBテーブルにあるデータを一つにまとめたいのですが、その際に、 「AテーブルとBテーブルの間で重複したデータがあるのでそれを削除したい。」のですが、手順としてどのような方法がスマートなのでしょうか。 (1)BテーブルをAテーブルに追加クエリで追加する。 (2)Aテーブルで重複クエリを作成し、重複しているデータを表示する。 ・・・・とここまで考えたのですが重複しているデータをどのように削除していけばいいかわかりません・・・。根本的にやり方が間違っているのでしょうか。どなたか詳しい方、いい方法を教えてください。よろしくお願い致します。

  • accessのデータで重複している行を削除したい

    accessのテーブルで、データシートに顧客のデータが入っています。 そこに、まったく同じデータが存在していますので、それを削除したい のですが、簡単に抽出して削除する方法等あるのでしょうか?? 重複クエリを試してみましたが、ちょっと違うようなので、 なにかいい方法を教えてください。 初歩的な質問で申し訳ありませんがよろしくお願いいたします。

  • 重複削除をマクロで

    はじめまして。 データをACCESSにインポートしてテーブル をクエリ重複削除しその後 テーブルを構成でコピー貼り付けして「主キー」設定して テーブルに重複削除できたデータが完成できるのですが これらをマクロできませんか? テーブルを構成で貼り付けする際、データがでかいと 固まってしまいます。 DISTINCTもためしてみましたがうまくいきません。 よろしくお願いします。

  • アクセスで重複しているデータを削除する方法

    こんにちは、過去質問検索したのですが、ちょっとわからなかったので教えてください。 アクセスのテーブルで重複したデータがあります。 (例) 削除前 001 ジュース 100円 001 ジュース 200円 002 キャベツ 100円 003 トマト  30円 003 トマト  60円 (例) 削除後 001 ジュース 200円 002 キャベツ 100円 003 トマト  60円 このような場合に、重複しているデータのうち 「値段の安い方を削除」したいのです。 データがたくさんありすぎて手作業では時間がかかりそうです。。 どなたか教えてください、よろしくお願いいたします。

  • ACCESS 重複データ削除の順番について

    追加クエリを使って重複データを削除する時に、削除されるデータについて質問です。 重複レコードを含むテーブルの構造のコピーを作成し、重複レコードを含むすべてのフィールドの主キーを作成して、元のテーブルから新しいテーブルへの追加クエリを実行して、重複レコードを一括削除をしています。 [操作についての参考URL] http://support.microsoft.com/kb/879852/ja =========================================== (テーブル) [ID]  [クラス]  [名前]   [時間]     1     A     ああ   11:00 ←重複 2     B     鈴木   12:00    3     C     アア   13:00     ←重複  4     A     ああ   14:00 ←重複 5     B     森    15:00   6     C     アア   16:00     ←重複  7     B     青山   17:00   8     C     アア   18:00     ←重複     9     A     ああ   19:00 ←重複 =========================================== 上記のようなテーブルで「クラス」と「名前」の2つのフィールドを主キーにした場合、 「A」の「ああ」さんと、「C」の「アア」さんが各3件ずつ重複しています。 しかし、「ID」と「時間」はそれぞれ違っています。 このような場合に、削除されないデータと削除されるデータの違いは何なのでしょうか? ACCESSの仕様でとか、レコードの若い番号順で削除されるとか、明確なルールが あれば教えていただけると幸いでございます。 御手数お掛け致しますが、何卒よろしくお願いいたします。

  • mysqlのデータベースの重複データの削除

    mysqlで同じデータが重複してしまっていて、それを1つにまとめたいのですが、適切な操作の方法が分かりません。ご教授いただけるとうれしいです。 table名:test name area number ken tokyo 1 jhon aichi 2 aiko osaka 3 ken tokyo 1 jhon aichi 2 aiko osaka 3 上のデータベースを例として重複データを削除するSQL文の書き方が知りたいです。 上の例でいくと下3行が削除できればいい形になりますね。 お手数ですがよろしくお願いします。

  • 重複データの整理

    アクセス2000を使用。毎日データを分析して抽出されたデータを累積テーブルに追加して蓄積していますが、その日々の抽出されたデータにデータが重複してる場合があります。(これは2種類のコード{日付と企業コード}を重複キーとしているためとおもわれる) 累積された蓄積テーブルから同一日における重複コードを削除する方法を 教えてください。  日付は 20070907、20070908の形式  コードは4桁の整数   例示 20070901  1 20070901  2 20070901  2・・・(消す) 20070901  3 20070901  3・・・(消す)     20070901  4 よろしくお願いします

  • accessで重複データの削除について

    accessというよりSQLについてなのかと思いますが、教えていただけないでしょうか。 重複するIDがあり、1件を除いて他のデータを削除してデータを抽出したいです。 抽出条件としては、[年月日]カラムがあるため、日付が一番直近のものを残したいです。  ※こちらも重複しております。 また、[フィルタ]カラムが「2」のレコードのみを対象としたいと思っています。 accessの場合、重複クエリを用いるのかと思い、クエリウィザードから作成しましたが 一意とはなりませんでした。 SELECT テーブル1.[共通ID], テーブル1.[連番], テーブル1.[郵便番号], テーブル1.[住所], テーブル1.[担当者名], テーブル1.[年月日], テーブル1.[フィルタ] FROM テーブル1 WHERE (((テーブル1.[共通ID]) In (SELECT [共通ID] FROM [テーブル1] As Tmp GROUP BY [共通ID] HAVING Count(*)>1 )) AND ((テーブル1.[フィルタ])=2)) ORDER BY テーブル1.[共通ID], テーブル1.[年月日] DESC; distinctも使ってみましたがうまくできませんでした。 何が原因でしょうか。 申し訳ありませんがご教示いただきたくお願いいたします。

  • Access で重複データを削除

    Access2010を使用しています。フィールドが2個あります。【都道府県名フールド】【市区町村名フィールド】です。 都道府県フールドには、重複データが有ります。【東京都 品川区】【 東京都 大田区】【千葉県 市川市】【千葉県 船橋市】・・・・】このような重複データがある時に、エクセルの【データ 重複の削除】の様な結果が欲しい。実行後は【東京都 品川区】【千葉県 市川市】です。*エクセルの重複の削除は最初の行が残ると有りました。簡単な方法をお願い致します。現在実施している方法はアクセスで、エクセルでエクスポートして、【データ データの削除】を実施しています。 ※OKWAVEより補足:「ひかりTVのサービスやISPぷらら」についての質問です。