• ベストアンサー

重複の場合は1件のみ取込む処理

カラムA,Bの値がそれぞれ 1レコード目AAAA,BBBB 2レコード目cccc,BBBB 3レコード目cccc,CCCC ここでselect distinct A,B from xxxxとすると 3レコードが取れますが、カラムAの値が同じならそれは重複したものとして1,2レコードだけを取り出す用法はありますか?

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

  • ベストアンサー
回答No.4

#2、#3回答者です。 #3回答の冒頭で、 「#1回答者です。」 と書いてしまいましたが、「#2回答者の誤り」です。 大変、失礼しました。

ritomo
質問者

お礼

#2回答さんへ 了解です。

その他の回答 (4)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.5

#1です。 サブクエリの使えるバージョンであれば、Bの確定ができると思います。 MySQLのバージョンを書かないと回答者がこまります

ritomo
質問者

お礼

回答ありがとうございます。 バージョンは4.1.10です。 失礼しました。

回答No.3

#1回答者です。 MySQLでは独自仕様として、「select A,B from xxxx group by A」という書き方をしても、文法エラーにしていないので注意してください。 標準SQL及び殆どのRDBMSでは、この書き方は文法エラーであり、「group by指定時は、selectの選択リストに書けるのは、group byで指定した列、集計(集合)関数、定数だけ」です。 MySQLはこのケースでは、Aでグループ化した結果、Bの値が一意に決まる場合のみ結果を保証し、そうでないなら結果を保証しないことになっています。 http://dev.mysql.com/doc/refman/4.1/ja/group-by-hidden-fields.html?ff=nopfpls

ritomo
質問者

お礼

回答ありがとうございます。 今後の展開を考えて標準SQLで許される記述にしておきます。

回答No.2

カラムBの値は、どちらを採用しますか? select A,max(B) as B from xxxx group by A や select A,min(B) as B from xxxx group by A などのように、Bの値をどうするかを決める必要があります。

ritomo
質問者

お礼

回答ありがとうございます。 なるほど、そうですね。 今回、必要なのはAの値だけですので、Bはmax,minでもどちらでもよい条件です。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

普通に select distinct A from xxxx ではないでしょうか?

ritomo
質問者

補足

早速の回答ありがとうございます。 カラムA,Bともに出力したいので、 select distinct A from xxxx では目的にかないません。