postgreSQL 3つのjoinしたSQL書く
受付中
回答 1
投稿
- 評価
- クリップ 0
- VIEW 1,086
テーブル
rankテーブル
touroko_ymd
riyou_amt
kousin_func
kaiin_rank
codetbテーブル
code_nm
code
type
knmeテーブル
menu_name
mstcode
この3つのテーブルをjoinさせたのですが
既存のコード
select
rank.touroku_ymd as touroko_ymd
rank.riyou_amt as riyou_amt
rank.kousin_func as kousin_func
codetb.code_nm as code_nm
knme.menu_name as menu_name
from
rank
left join
knme
on rank.mstcode = knme.mstcode
left join
code
on rank.kaiin_rank = codetb.code
where
rank.no =1923
and
codetb.type=293
テーブル利用して
テーブル別にjoinするコードに直しなさいと言われたのですが全くできずに困っています。
テーブル利用したのですがうまくいかず
2時間ほどいろいろ試してますがうまくいかず
3つのテーブルをきれいにjoinするためにはどうすればよろしいでしょうか?、、
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+1
何がどううまくいかないのかがちと分かりませんが、
少なくとも13行目、2つ目のLEFT JOIN句下の指定しているテーブル名は間違ってるのではないでしょうか。
code → codetbでは?
以下追記
PCからSQLを確認してみると、上記のミス以前にクエリがめちゃくちゃですね・・・
以下にとりあえず動作はするクエリは記載しますが、
同時にいくつか指摘させていただきますので合わせて確認して下さい。
SELECT
/* 指摘1:大前提としてSELECT句でカラムをリストする時はカンマ区切りが必要です */
rank.touroku_ymd AS touroko_ymd
, rank.riyou_amt AS riyou_amt
, rank.kousin_func AS kousin_func
, codetb.code_nm AS code_nm
, knme.menu_name AS menu_name
FROM
rank
LEFT JOIN knme
/* 指摘2:rankテーブルにmstcodeはないためNG、そもそも結合できるテーブル同士?? */
-- ON rank.mstcode = knme.mstcode
ON rank.kousin_func = knme.mstcode
LEFT JOIN codetb
/* 指摘3:下記も結合条件として本当に妥当?? */
ON rank.kaiin_rank = codetb.code
WHERE
/* 指摘4:rankテーブルにカラム名が「NO」のものが見当たりません(定義を全部掲載してないだけ??) */
-- rank."NO" = 1923
/* 指摘5:下記のように抽出条件を付けるとLEFT JOINの意味がありません */
codetb.type = 293
そもそも上記3つのテーブルってそれぞれ関連しあっているのでしょうか?
関連し合っているなら先ずは結合条件として適切なものを選択して下さい。
関連し合ってないなら、くっつけようがないです。
あえてくっつけるなら直積(CROSS JOIN)を使えばくっつけられますが、
恐らく意味はないし、やりたいこととも異なるでしょう。
先ずはやりたいこと・要件の再整理からスタートですね。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.10%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2017/01/26 09:27
一度整理して考えたらできました!
2017/01/26 11:01
問題が解決して何よりです。
煮詰まったときは一度距離を置いて、
冷静に振り返ってみることも大事ですね。