- ベストアンサー
3つのテーブルを連携した並び替えのSELECT文
- 3つのテーブルを連携した並び替えのSELECT文について教えて下さい。
- 3つのテーブルを使ってレコードを並び替えたい場合、どのようなSELECT文を書くと良いでしょうか?
- COOK_TBL、ZAIRYO_TBL、COOK_KIOKU_TBLの3つのテーブルを連携して、COOK_TBLのレコードを特定の順序で取得する方法を教えてください。
- みんなの回答 (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以外のソートが設定されていないので、ソート順は必ずしも一意にならない
お礼
回答ありがとうございます。 各テーブルの定義まで書いた方がよかったかなと少し反省しています。 見たこともない文字を使ったSQLの回答でしたので、自分でできるわけがなかったなとも感じてます。 回答は何となく分かりましたが、いただいたSQLを調べて勉強します。 助かりました。本当にありがとうございます。