MySQLで重複データを省きたい


お世話になっています。

イベントマスタ、イベント、ニュース、テーブルがあり
イベントデータだけ重複を省きたいです。

DISTINCTとGROUP BYが思い浮かんだのですが、
3つ以上のテーブルを結合するのに特定の1つのカラムのみ重複を省きたいので
DISTINCTが使用できず

イベントマスタにGROUP BYを使用してしまうとニュースの項目がとってこれなくなってしまいます。

スマートな書き方はないでしょうか?

ご教授宜しくお願いします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/11/08 11:51:50
  • 終了:2012/11/15 11:55:03

回答(1件)

id:taknt No.1

きゃづみぃ回答回数13481ベストアンサー獲得回数11982012/11/08 12:29:01

抽出した結果に対してselect distinct としてやればいいです。

id:oracle11011

今現在のやり方なのですが

SELECT ex.name, MAX( top.regi )
FROM dtb_event AS ev
LEFT JOIN dtb_top AS top ON top.event_id = ev.id
LEFT JOIN mtb_ex AS ex ON ex.id = ev.ex
GROUP BY ex.name
HAVING MAX( top.regi ) IS NOT NULL
ORDER BY MAX( top.regi ) DESC

これでイベントデータは取得してきて

ニュースデータは
SELECT top.regi, ne.name
FROM dtb_news AS ne
LEFT JOIN dtb_top AS top ON top.news_id = ne.id
ORDER BY top.regi DESC

で取得して
array_merge();
array_multisort();

でイベントとニュースの並び順をあわせています。

この処理を1回のsqlで実行できないでしょうか。

2012/11/09 10:23:59
id:oracle11011

補足

dtb_top
event_id news_id regi//登録日

mtb_ex 展示場マスタ 
id name

dtb_event
id ex name

dtb_news
id name

この4テーブルがありsqlは

SELECT ex.name, ne.name, top.regi
FROM dtb_top AS top
LEFT JOIN dtb_event AS ev ON top.event_id = ev.id
LEFT JOIN mtb_ex AS ex ON ex.id = ev.ex
LEFT JOIN dtb_news AS ne ON top.news_id = ne.id
ORDER BY top.regi DESC

な感じなのですが
イベントデータだけ登録日が新しい展示場ごと1件だけを取得したいです。

ニュースはイベントとの並び順だけを維持したいです。

1回のクエリーでやってみたいです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません