質問: 例題:◎上位3件だけ「ガンバレ!」と修正 すべての売り上げを比較して、下位3件だけ「ガンバレ!」 と入力します。 さて、「下位3件」という条件は、どのように設 定すればよいでしょうか? ヒント カラム「uria」を「ORDER BY」で降順に並べ、「LIMIT 3」 で最初の3件だけ「SELECT」し、カラム「biko」に 「ガンバレ!」 と入力する要領で、「UPDATE」を実行します。 以下実行結果 ------------------------------- mysql> UPDATE tb -> SET bikou='ガンバレ!' -> ORDER BY uria -> LIMIT 3; Query OK, 0 rows affected (0.00 sec) Rows matched: 3 Changed: 0 Warnings: 0 mysql> select * from tb; +------+------+------+------------+ | bang | uria | tuki | bikou | +------+------+------+------------+ | A103 | 101 | 4 | 優秀 | | A102 | 54 | 5 | ガンバレ! | | A104 | 181 | 4 | 優秀 | | A101 | 184 | 4 | 優秀 | | A103 | 17 | 5 | ガンバレ! | | A101 | 300 | 5 | 優秀 | | A102 | 205 | 6 | 優秀 | | A104 | 93 | 5 | 特記なし | | A103 | 12 | 6 | ガンバレ! | | A107 | 87 | 6 | 特記なし | +------+------+------+------------+ 10 rows in set (0.00 sec) ------------------------------------- しかし ------------------------------- mysql> UPDATE tb -> SET bikou='ガンバレ!' -> ORDER BY tuki -> LIMIT 3; Query OK, 2 rows affected (0.01 sec) Rows matched: 3 Changed: 2 Warnings: 0 mysql> select * from tb; +------+------+------+------------+ | bang | uria | tuki | bikou | +------+------+------+------------+ | A103 | 101 | 4 | ガンバレ! | | A102 | 54 | 5 | ガンバレ! | | A104 | 181 | 4 | ガンバレ! | | A101 | 184 | 4 | ガンバレ! | | A103 | 17 | 5 | ガンバレ! | | A101 | 300 | 5 | ガンバレ! | | A102 | 205 | 6 | 優秀 | | A104 | 93 | 5 | 特記なし | | A103 | 12 | 6 | ガンバレ! | | A107 | 87 | 6 | 特記なし | +------+------+------+------------+ 10 rows in set (0.00 sec) ------------------------------------------ 以上ですが 前者のORDER BY uriaを 後者のORDER BY tukiにすると 「ガンバレ!」の値が変わっています。 そこで質問です。 1 なんで後者はこんな結果になるのですか? 前者と後者のロジック違いは何ですか? 2ORDER BY関数はソート機能 ですが、なんで、この場面で使うと前者ですがうまくい くのですか?ここでのORDER BYをつかうロジックが 分かりません!? よろしくお願いいたします。
回答: order byは並べ替えの指定ですから、uriaとtukiを変えれば結果が変わるのは当然でしょう。 uriaの下位3件を選び出すのに、uriaの順(降順)で並び替えて最初の3件を更新。 と tukiの下位3件を選び出すのに、tukiの順(降順)で並び替えて最初の3件を更新。 で、結果が変わらない方がおかしいです。