重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

3つのテーブルを連携した並び替えのSELECT文について教えて下さい。

例えば次の3つのテーブルがあるとします。

COOK_TBL
----------------
COOK_NAME

パスタ
パスタ
グラタン
オムライス
グラタン
カレー


ZAIRYO_TBL
---------------
COOK_NAME ZAIRYO_NAME

グラタン  鶏肉
オムライス 卵
オムライス 玉ねぎ
パスタ   卵
パスタ   麺


COOK_KIOKU_TBL
---------------
COOK_NAME

オムライス
グラタン




COOK_TBLのCOOK_NAMEでグルーピングしたものに対し、ZAIRYO_TBLのCOOK_NAMEに存在するものは全て抽出し、
COOK_KIOKU_TBLのCOOK_NAMEとCOOK_TBLのCOOK_NAMEと一致するレコードは頭の方(COOK_KIOKU_TBLのCOOK_NAMEのレコード順)に並び替えられるようにしたいです。

得たい結果は次の通りです。

COOK_TBL
-------------
COOK_NAME

オムライス
グラタン
パスタ


どうしても分かりません。
助けて下さい。


os: windows 7
eclipse: Version: 4.2.0

A 回答 (1件)

>COOK_KIOKU_TBLのCOOK_NAMEとCOOK_TBLのCOOK_NAMEと一致するレコードは頭の方



というのであればCOOK_KIOKU_TBLに順位を確定させるためのソートキーが必要
それぞれidをふるとするとこんな感じかな?

create table COOK_TBL(cid int not null primary key auto_increment,COOK_NAME varchar(10));
insert into COOK_TBL(COOK_NAME) values('パスタ'),('パスタ'),('グラタン'),('オムライス'),('グラタン'),('カレー');

create table ZAIRYO_TBL(zid int not null primary key auto_increment,COOK_NAME varchar(10),ZAIRYO_NAME varchar(10));
insert into ZAIRYO_TBL(COOK_NAME,ZAIRYO_NAME) values('グラタン','鶏肉'),('オムライス','卵'),('オムライス','玉ねぎ'),('パスタ','卵'),('パスタ','麺');

create table COOK_KIOKU_TBL(kid int not null primary key auto_increment,COOK_NAME varchar(10));
insert into COOK_KIOKU_TBL (COOK_NAME) values('オムライス'),('グラタン');

//表示
SELECT DISTINCT k.kid,c.COOK_NAME FROM COOK_TBL as c
INNER JOIN ZAIRYO_TBL as z ON c.COOK_NAME=z.COOK_NAME
LEFT JOIN COOK_KIOKU_TBL as k ON c.COOK_NAME=k.COOK_NAME
ORDER BY COALESCE(k.kid,9999);

→kidがnullになる場合は適当に大きなデータにしておく(手抜き)
→kid以外のソートが設定されていないので、ソート順は必ずしも一意にならない
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
各テーブルの定義まで書いた方がよかったかなと少し反省しています。

見たこともない文字を使ったSQLの回答でしたので、自分でできるわけがなかったなとも感じてます。
回答は何となく分かりましたが、いただいたSQLを調べて勉強します。

助かりました。本当にありがとうございます。

お礼日時:2014/04/21 18:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す