【SQL】JOINとかよくわかんねぇから物理攻撃で解決してやる

SQL
Defence-Imagery / Pixabay
この記事は約3分で読めます。

SQLを叩いている際に、JOINなどを使い一発で必要なデータが出力できたときは嬉しいですよね。

ただ、JOINをいっぱいしているとなんの処理してるかこんがらがったり、そもそもJOINでは解決しずらいような問題も多々出てきます。

頑張って試行錯誤してJOINしても良いのですが、ソースコード上のSQLなどではなくて、一時的にデータを出力したいだけな場合には、処理を切り分けて物理攻撃(一つの情報を出すSQLを連打)を仕掛けるのもありだと思います。

いや、俺はSQLから逃げないんだ!!って方は、頑張ってください。
私応援しております。

作業内容例

今回はあるお店のお客様のリストを出力する例を上げてみました。
できそうな方はぜひSQLオンリーでやってぜひとも僕にやり方を教えて下さい。

抽出条件

・特定の店舗にいるお客様のリストを出したい
・お客様毎に、一番最後に注文した商品の情報も付随して知りたい

想定テーブル

shopsテーブル (店舗情報)

id 店舗ID
name 店舗名
place 住所

usersテーブル(お客様)

id お客様ID
name 名前
age 年齢
memo 備考

menusテーブル (メニュー詳細)

id メニューID
name 商品名
price 金額

requestsテーブル (商品注文履歴)

id 注文番号ID
menue_id メニューID

※updated,createdなどは省略

早速書いてみた

とりあえず見切り発車でSQLを書き始めたところで、

こんな感じのSQLまで私は書いてみました。

ただ、ここから

「どうやったら一番最後に注文された商品の情報を出力するのか?」

がわかリませんでした。

join,,,group by,,,うーん,,,わからん!!

ということで、物理攻撃に走りましょう。

上記をやってあげると、「お客様の情報+商品ID」「商品ID+商品情報」のリストが作成されます。

後はコマンドでいい感じにくっつけて上げてもいいし、エクセルとかGoogleSpreadSheetに貼り付けてセルフジョインしてしまえば完成ですね。

物理攻撃SQLの基本形

今回物理攻撃SQLというタイトルをつけましたが、結局やっていることはbashのwhileを回して処理をしているだけです。
だた、これを使えるか否かは作業速度に雲泥の差が出るので、SQLに使わなくても覚えるだけ覚えて置くと役に立つかもしれません。

以上分かりづらい文章にお付き合いいただきありがとうございます。

コメント