現在SQLを勉強しています。現場のデータベースがMySQLなのでMySQLを勉強中です。
現在書き方がわからないものがあるのですが教えていただくことはできますでしょうか?
少し変な例えになるかもしれませんが、以下の様なテーブルがあり、
売上表.売上Noがあれば、売上表から顧客CDを取得し、
なければ顧客表から顧客CDを取得する。
このようなSQLを書きたいのです。
CASE式が使えるのかと考えたのですが、うまくSQLに表現できず、わからずにいます。
もしアドバイスいただける方がいればよろしくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
コメントを踏まえて行いたいことをSQLに起こすと以下のような感じですかね。
SQL
1SELECT 2 MAIN.* 3FROM 4 ( 5 SELECT 6 CASE 7 WHEN T2.ID IS NOT NULL THEN '1' -- 果物 8 WHEN T3.ID IS NOT NULL THEN '2' -- 野菜 9 ELSE NULL 10 END AS 食べ物区分 11 , COALESCE(T2.ID, T3.ID) AS ID 12 , COALESCE(T2.名前, T3.名前) AS 名前 13 , COALESCE(T2.値段, T3.値段) AS 値段 14 FROM 15 食べ物テーブル T1 16 LEFT JOIN 果物テーブル T2 17 ON T1.果物ID = T2.ID 18 LEFT JOIN 野菜テーブル T3 19 ON T1.野菜ID = T3.ID 20 ) MAIN
一応上記のクエリで、
0. 食べ物テーブルにあって果物テーブルにもあるなら果物からデータ表示
0. 食べ物テーブルにあって果物テーブルにないなら野菜からデータ表示
という要件は満たせるかと思います。
ただし、食べ物テーブルの1レコードで果物ID、野菜IDどちらもデータが存在するパターンの場合、
果物テーブルの値が優先出力されます。
この辺はもう少し要件を詰める必要があるかもですね。
ちなみに上記SQLでは擬似的に食べ物区分というカラムをサブクエリで作ってますが、
不要でしたらカットして下さい^^
###追記
もしかしたらこちらも要件捉え間違えてるかもしれません。
上記クエリは以下の前提条件を満たす必要があるので、確認お願い致します。
- 食べ物テーブルは「果物ID」、「野菜ID」のカラムを持つこと
- 上記2カラムから果物テーブル、野菜テーブルそれぞれIDでリンクされていること
特に2番目は重要で、果物が存在しない場合に野菜からデータ取得したいとした時、
IDでリンクされていない状態であるとどの野菜IDのデータを取得すべきか判断できません。
(※果物の検索に利用するIDで野菜を検索するなら話は変わりますが)
投稿2016/07/25 15:38
編集2016/07/25 16:12総合スコア1636
0
売上表と顧客表の、リレーションは顧客CDをキーにしているわけではない?
これは売上表と顧客表になにか隠れたIDがあるのでしょうか?
投稿2016/07/25 13:34
編集2016/07/25 13:36総合スコア114839
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/25 13:52 編集
2016/07/25 13:57
2016/07/25 14:39
2016/07/25 15:13
2016/07/25 15:24
2016/07/26 01:26
2016/07/26 12:25
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/25 23:06