プロが教える店舗&オフィスのセキュリティ対策術

http://tech.pjin.jp/blog/2016/05/12/sql練習問題-問5/
の問題の
違うSQLありますか

質問者からの補足コメント

  • Select句は1つです。

      補足日時:2018/07/11 15:19

A 回答 (1件)

私が他の質問で回答したSQLは異なりますよ。


この正解のSQLは、国情報(countries)に、対象の国データがなくても国名をNULLとして抽出します。
私が提示したものは、国情報がないデータは抽出しません。
(マスタデータとトランザクションデータに整合性がないとか、そもそもDB設計としておかしいんじゃないの?)

あとこの正解は、ORDER BY がkickoffしかないため、開始時間が同一のレコードが複数ある場合、必ず同じ順序で抽出するとは限りません。
そういう意味で、私が書いた解答はpairing_idも第二ソートとして指定しています。

他にもやたらめったに書けば違うSQLなんて書けますが、視認性およびパフォーマンスがいいとは思いません。

正解のSQLに合わせた書き方であれば、以下でも同じ結果が得られます。
結合することなく、paringsから抽出された1レコードずつ、国名1、国名2を調べに行くわけですから、当然、元のクエリよりパフォーマンスは良くありません。
(データ量が100万件とかあると分かりやすい)
SELECT
kickoff AS キックオフ日時
, (SELECT c.name FROM countries c WHERE c.id = p.my_country_id) AS 国名1
, (SELECT c.name FROM countries c WHERE c.id = p.enemy_country_id) AS 国名2
FROM
pairings p
ORDER BY
kickoff

勉強なら、自分で手を動かして結果を確認して、トライ&エラーしないと身につきませんよ。
    • good
    • 0
この回答へのお礼

ありがとございました

お礼日時:2018/07/11 16:14

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