• ベストアンサー

重複を除いた結果が欲しい

重複を除いた結果が欲しいのですが、 DISTINCTだと取得する全てのカラムの内容が一致すると重複と言う扱いになってしまいます。 複数のカラムデータを取得する場合でも、指定したカラムデータが重複したら除くようにしたいのですが、スマートな構文はないでしょうか?

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

それはグループ化です。但し、「指定したカラム」以外のフィールドの 扱いをどうするか考えておく必要があります。最大値、最小値、平均値、 合計、カウント、・・・など SELECT 指定カラム1,指定カラム2,MAX(指定外カラム1),・・・ FROM テーブル GROUP BY 指定カラム1,指定カラム2

takatokoko
質問者

お礼

ご回答ありがとうございます。 “GROUP BY 指定カラム1,指定カラム2”だと、 指定カラム1は重複しないと思いますが、指定カラム1が違えば指定カラム2は重複してしまうと思うのです。 ご意見、参考にさせて頂きました、ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

具体的なアドバイスを得たいなら、もっと具体的な内容を提示してください。どういう母体データから、どういう結果を得たいのでしょうか? また、MySQLならMySQL 4.0以前と4.1以降で、サブクエリの実装など大きな機能差がありますから、バージョンも明記してください。

takatokoko
質問者

お礼

ご回答ありがとうございます。 +---+--------+--------+ | id | namae | myouji | +---+--------+--------+ | 1 | タロウ  | スズキ | +---+--------+--------+ | 2 | ハナコ  | スズキ | +---+--------+--------+ | 3 | タロウ  | サトウ | +---+--------+--------+ 上記のレコードを、“~ ORDER BY id”で実行して、 id1のレコードのみが取得できれば成功です。 (id2は、myoujiが重複したので除く) (id3は、namaeが重複したので除く) MySQL5.0です。 サブクエリを使わないで実現できますでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連する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文を教えてください。よろしくお願いします。

  • 複数のテーブルからデータを取得したい

    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で出来ると 思いますが、重複したデータのみを取得できるような SELECT句を教えて頂けないでしょうか? お手数では御座いますが、ご教授お願い致します。

  • アクセスで重複のカウント

    アクセスで重複排除後のカウントを行いたいのですが・・。例えば、TEST1テーブルのaaaカラムの重複排除後のカウントを知りたい場合、一般的には、SELECT COUNT(DISTINCT aaa) FROM TEST1となると思いますが、アクセスではどのような記述ができるのでしょうか?宜しくお願いします。

  • エクセルでの重複カウントについて

    添付のような表があります。 カラムAには、一部重複するデータが入力されています。 まずは重複を削除したカラムCを作成し、その後カラムDには重複していた数を入力したいのですが、どのような作業をしたら可能でしょうか? 結果のセルは同一シートでなくても構いません。

  • 複数テーブルから全データ取得する際、同カラムあり

    SELECTで複数テーブルから、全カラム値を取得する際、同名カラムがあったとき、指定テーブルの値を取得したいのですが、どうすれば良いでしょうか? ◆前提 ・テーブル「r1」 ・テーブル「t1」 ・テーブル「u1」 ※「r1」「u1」には、同名カラム「z2」あり ◆やりたいこと ・条件一致する全てのデータを取得したい ・但し、「z2」カラムの値は、「r1」テーブルの値を取得したい ◆現状 $sql="SELECT * FROM (`r1`) JOIN `t1` JOIN `u1` ON `r1`.`tid` = `t1`.`tid` And`r1`.`uid` = `u1`.`uid`"; ◆疑問 3つのテーブルから条件一致するデータを全て取得しているのですが、 「r1テーブル」「u1テーブル」に同じカラム名(z2)があるためか、 取得結果のz2内容が、「u1テーブル」の「z2カラム」値となっています(多分…)。 この時、「r1テーブル」の「z2カラム」を取得するには、どうすれば良いでしょうか? (「r1テーブル」の「z2カラム」だけを単独で取得したいわけではなく、「SELECT * 」結果した際の「z2カラム」の値を「r1テーブル」のものにしたいです)

    • ベストアンサー
    • MySQL
  • MySQLでデータが存在する日付を取得する方法

    MySQLで、DATETIME型のカラムから、指定した日数分の、データが存在する日付を取得することは可能でしょうか? 例えば、下記 table_a から最近3日分のデータが存在する日を取得したい場合、 2011-06-18 2011-06-16 2011-06-12 が最近3日のデータが存在する日なので、結果に示すようなものが取得したい内容となります。 (下記結果では、各日付けの最後の時刻が取得されていますが、時刻はどれでも構いません) もしそのようなことができるSQL構文がありましたら、ご教示ください。 よろしくお願いします。 (table_a) +---------------------+ | date | +---------------------+ | 2011-06-09 09:00:00 | +---------------------+ | 2011-06-09 15:00:00 | +---------------------+ | 2011-06-10 09:00:00 | +---------------------+ | 2011-06-11 09:00:00 | +---------------------+ | 2011-06-12 07:00:00 | +---------------------+ | 2011-06-12 09:00:00 | +---------------------+ | 2011-06-16 09:00:00 | +---------------------+ | 2011-06-18 09:00:00 | +---------------------+ | 2011-06-18 12:00:00 | +---------------------+ | 2011-06-18 20:00:00 | +---------------------+ (結果) +---------------------+ | date | +---------------------+ | 2011-06-18 20:00:00 | +---------------------+ | 2011-06-16 09:00:00 | +---------------------+ | 2011-06-12 09:00:00 | +---------------------+

    • ベストアンサー
    • MySQL
  • SQLで複数列のデータを複数行にしたい

    以下のようなテーブルがあるとします。 column1 a,b,c <- カンマの数は最大50 b,d c,x SQLを実行し以下のような結果を返したいです。 以下の3つのことをすればできそうなのですが複数列を複数行にする方法がわかりません。 1.strtokenで50カラムに分割(カンマ分割) 2. 50カラムを1カラムにする 3.DISTINCTで重複データの削除 結果 a b c d x カンマの数が50あるので、かなり長いSQLになるのですが SELECT文50個をUNIONしてやればできるかなとも考えているのですが 何か良い方法はないでしょうか。 よろしくお願いします。

  • 重複データをカウントするのに便利なSQL文

    phpで検索結果画面の制作を勉強中です。 pdoでmysqlデータベースに接続しています。 添付画像のように、 重複しているデータをひとつにまとめ、それぞれの重複数を取得するようなSQL文はないでしょうか? ちなみにできれば、添付画像のように、 フォームで入力されたテキストをもとに、 WHERE文でカラム名をあいまい検索をした上で 該当する重複レコードのカラム名を1つだけ表示し、その横に重複数を表示したいです。 フォームのテキストをもとにあいまい検索をする方法は理解しておりますので、 該当する重複レコードのカラム名を1つだけを取得し、その重複数も取得できるようなSQL文があれば教えていただきたいです。 色々と試しては見たのですが、中々上手くいかずに悩んでいます。 ご回答、よろしくお願いします。

    • ベストアンサー
    • PHP
  • DISTINCTについて

    こんにちは。質問させて下さい。 重複レコードを除くデータを取得する際、 DISTINCT キーワードを使用しますが 重複レコードを取得したい場合はどのようにすれば よいのでしょうか? 宜しくお願いいたします。