• 締切済み

一部のカラムでdistinctし全てのカラムを取得

環境はmysql5.2です。 例えば以下のようなテーブルがある時 pref   city  town ---------------- 東京  港区  A町 東京  南区  C町 大阪  北区  D町 大阪  北区  E町 愛知  南区  F町 愛知  南区  G町 prefのみが重複しないように、全てのカラムを取得しようと思っているのですが、 select distinct pref, city, town … とすると当然全て取得されます また、 select disitinct pref … とするとたしかにprefは重複せずにすむのですが、cityとtownを取得することが出来ません。 どのようにすればprefだけは重複させずに全てのカラムを取得することが出来るのでしょうか。 ご存じの方がいらっしゃればご教授お願いします。

みんなの回答

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

IDの最小値をとるなら簡単な話で select pref,city,town FROM テーブル WHERE id IN(SELECT min(id) FROM テーブル GROUP BY pref)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

mysql 5.1.54 で確認しましたが select * from tbl t1 where not exists ( select 1 from tbl t2 where t1.pref=t2.pref and ( t1.city, t1.town ) > ( t2.city, t2.town ) ); と書けるようです。

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

>prefだけは重複させずに全てのカラムを取得する 今回の例で言えば具体的にどういう結果ならよいのでしょうか? group by してgroup_concatしたいのかな?

honahonararara
質問者

補足

すみません説明が不足していました。 この場合は pref   city  town ---------------- 東京  港区  A町 東京  南区  C町 大阪  北区  D町 大阪  北区  E町 愛知  南区  F町 愛知  南区  G町 からprefでdistinctして、prefが同じものがある場合、IDが一番小さい物だけを取得したいということです。つまり以下の結果を期待します。 東京  港区  A町 大阪  北区  D町 愛知  南区  F町 説明不足ですみませんでした

関連するQ&A