ホーム > 未分類 > MySQLのGROUP BYは、寛容すぎて気持ちが悪い。

MySQLのGROUP BYは、寛容すぎて気持ちが悪い。

以前の職場ではOracleばかり使っていたのですが、MySQLを使うようになってちょっとカルチャーショック、というお話。

以下のようなテーブルがあってですよ、

mysql> SELECT table_a.* FROM table_a;
+-------+-------+-------+
| col_a | col_b | col_c |
+-------+-------+-------+
|     1 |     1 |     1 | 
|     2 |     1 |     2 | 
|     3 |     2 |     2 | 
|     4 |     2 |     1 | 
+-------+-------+-------+
4 rows in set (0.00 sec)

以下のように、GROUP BYに含まれない列でもSELECTできちゃうんですね。

mysql> SELECT col_b, col_c FROM table_a GROUP BY col_b;
+-------+-------+
| col_b | col_c |
+-------+-------+
|     1 |     1 | 
|     2 |     2 | 
+-------+-------+
2 rows in set (0.00 sec)

col_cの値はどれがSELECTされるのだろう…。物理的な先頭行の値?

Oracleだとたしか構文エラーになったよなーなんて思っていたのですが、ちゃんと「MySQLによる拡張です」って書いてありました。
本家ドキュメント:MySQL extends the use of GROUP BY…

前述のようなケースは「やっちゃだめ」とも書いてありますね。

Do not use this feature if the columns you omit from the GROUP BY part are not constant in the group.

さらに環境変数 sql_modeONLY_FULL_GROUP_BY を設定すれば、この拡張は抑制されるみたい。

mysql> SET sql_mode = 'ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)
 
mysql> SELECT col_b, col_c FROM table_a GROUP BY col_b;
ERROR 1055 (42000): 'database_a.table_a.col_c' isn't in GROUP BY

あいまいなSQLを未然に防止するためには、設定しておいた方がいい気がする…。

カテゴリー: 未分類 タグ:
  1. 2020 年 7 月 6 日 14:49 | #1

    Your style is unique compared to other people I have read stuff from. Thank you for posting when you’ve got the opportunity, Guess I will just book mark this page.

  2. 2020 年 7 月 6 日 14:53 | #2

    I and my pals appeared to be reading through the best ideas located on your web page and so immediately I got an awful suspicion I had not thanked the blog owner for those tips. Most of the people happened to be for that reason thrilled to read through all of them and have in effect simply been having fun with those things. I appreciate you for being quite helpful and for picking this kind of really good subject areas most people are really desperate to be informed on. Our own honest apologies for not saying thanks to sooner.

  3. 2020 年 7 月 6 日 14:53 | #3

    An outstanding share! I have just forwarded this onto a co-worker who had been conducting a little homework on this. And he in fact ordered me breakfast simply because I found it for him… lol. So let me reword this…. Thank YOU for the meal!! But yeah, thanx for spending some time to discuss this topic here on your web page.

  4. 2020 年 7 月 6 日 14:54 | #4

    I loved as much as you’ll receive carried out right here. The sketch is tasteful, your authored material stylish. nonetheless, you command get got an impatience over that you wish be delivering the following. unwell unquestionably come more formerly again as exactly the same nearly a lot often inside case you shield this increase.

  5. 2020 年 7 月 6 日 14:55 | #5

    Good post! We are linking to this great post on our website. Keep up the good writing.

  6. 2020 年 7 月 6 日 14:56 | #6

    A fascinating discussion is worth comment. I do think that you need to publish more on this topic, it may not be a taboo matter but generally people do not talk about such issues. To the next! All the best!!

  7. 2020 年 7 月 6 日 15:05 | #7

    Everything is very open with a very clear description of the challenges. It was definitely informative. Your website is very helpful. Thank you for sharing!

  8. 2020 年 7 月 6 日 15:12 | #8

    Excellent post. I was checking continuously this blog and I am impressed! Extremely helpful info particularly the last part :) I care for such information much. I was seeking this particular information for a long time. Thank you and best of luck.

  9. 2020 年 7 月 6 日 15:24 | #9

    A fascinating discussion is worth comment. I believe that you ought to publish more on this issue, it may not be a taboo matter but usually folks don’t speak about these issues. To the next! Many thanks!!

  10. 2020 年 7 月 6 日 15:31 | #10
  11. 2020 年 7 月 6 日 15:37 | #11

    Hi! I just wish to offer you a big thumbs up for the great information you have got right here on this post. I will be returning to your site for more soon.

  12. 2020 年 7 月 6 日 15:47 | #12

    This is the perfect website for anybody who really wants to understand this topic. You realize so much its almost tough to argue with you (not that I really will need to…HaHa). You definitely put a fresh spin on a subject which has been written about for many years. Excellent stuff, just wonderful!

コメントページ
1 218 219 220 71
  1. 2014 年 8 月 7 日 19:23 | #1
  2. 2020 年 4 月 17 日 04:05 | #2
  3. 2020 年 4 月 17 日 18:54 | #3
  4. 2020 年 4 月 21 日 04:57 | #4
  5. 2020 年 4 月 22 日 14:21 | #5
  6. 2020 年 4 月 26 日 13:14 | #6
  7. 2020 年 4 月 26 日 17:49 | #7
  8. 2020 年 4 月 26 日 18:31 | #8
  9. 2020 年 4 月 29 日 23:56 | #9
  10. 2020 年 4 月 30 日 06:43 | #10
  11. 2020 年 4 月 30 日 07:57 | #11
  12. 2020 年 4 月 30 日 09:37 | #12
  13. 2020 年 4 月 30 日 10:17 | #13
  14. 2020 年 4 月 30 日 17:26 | #14
  15. 2020 年 5 月 1 日 05:03 | #15
  16. 2020 年 5 月 1 日 08:43 | #16
  17. 2020 年 5 月 1 日 11:52 | #17
  18. 2020 年 5 月 2 日 20:28 | #18
  19. 2020 年 5 月 2 日 22:01 | #19
  20. 2020 年 5 月 2 日 23:08 | #20
  21. 2020 年 5 月 2 日 23:48 | #21
  22. 2020 年 5 月 3 日 06:17 | #22
  23. 2020 年 5 月 3 日 06:50 | #23
  24. 2020 年 5 月 3 日 11:16 | #24
  25. 2020 年 5 月 3 日 17:25 | #25
  26. 2020 年 5 月 4 日 07:14 | #26
  27. 2020 年 5 月 4 日 09:50 | #27
  28. 2020 年 5 月 4 日 14:38 | #28
  29. 2020 年 5 月 4 日 17:03 | #29
  30. 2020 年 5 月 4 日 18:17 | #30
  31. 2020 年 5 月 4 日 23:03 | #31
  32. 2020 年 5 月 5 日 02:11 | #32
  33. 2020 年 5 月 5 日 02:22 | #33
  34. 2020 年 5 月 5 日 06:21 | #34
  35. 2020 年 5 月 5 日 06:41 | #35
  36. 2020 年 5 月 5 日 09:27 | #36
  37. 2020 年 5 月 5 日 12:05 | #37
  38. 2020 年 5 月 5 日 14:01 | #38
  39. 2020 年 5 月 5 日 15:09 | #39
  40. 2020 年 5 月 5 日 18:32 | #40
  41. 2020 年 5 月 5 日 20:53 | #41
  42. 2020 年 5 月 6 日 01:36 | #42
  43. 2020 年 5 月 6 日 01:39 | #43
  44. 2020 年 5 月 6 日 02:28 | #44
  45. 2020 年 5 月 6 日 05:57 | #45
  46. 2020 年 5 月 6 日 07:38 | #46
  47. 2020 年 5 月 6 日 08:36 | #47
  48. 2020 年 5 月 6 日 10:18 | #48
  49. 2020 年 5 月 6 日 10:53 | #49
  50. 2020 年 5 月 6 日 12:47 | #50
  51. 2020 年 5 月 6 日 13:51 | #51
  52. 2020 年 5 月 6 日 17:50 | #52
  53. 2020 年 5 月 6 日 21:54 | #53
  54. 2020 年 5 月 7 日 16:43 | #54
  55. 2020 年 5 月 7 日 17:41 | #55
  56. 2020 年 5 月 7 日 22:11 | #56
  57. 2020 年 5 月 7 日 22:53 | #57
  58. 2020 年 5 月 8 日 00:00 | #58
  59. 2020 年 5 月 8 日 01:31 | #59
  60. 2020 年 5 月 8 日 02:53 | #60
  61. 2020 年 5 月 8 日 06:41 | #61
  62. 2020 年 5 月 8 日 07:00 | #62
  63. 2020 年 5 月 8 日 07:52 | #63
  64. 2020 年 5 月 8 日 10:25 | #64
  65. 2020 年 5 月 8 日 11:23 | #65
  66. 2020 年 5 月 8 日 11:26 | #66
  67. 2020 年 5 月 8 日 14:14 | #67
  68. 2020 年 5 月 8 日 14:30 | #68
  69. 2020 年 5 月 8 日 18:10 | #69
  70. 2020 年 5 月 8 日 22:40 | #70
  71. 2020 年 5 月 9 日 00:29 | #71
  72. 2020 年 5 月 9 日 03:09 | #72
  73. 2020 年 5 月 9 日 04:35 | #73
  74. 2020 年 5 月 9 日 05:44 | #74
  75. 2020 年 5 月 9 日 06:57 | #75
  76. 2020 年 5 月 9 日 11:16 | #76
  77. 2020 年 5 月 9 日 14:04 | #77
  78. 2020 年 5 月 9 日 14:58 | #78
  79. 2020 年 5 月 17 日 03:41 | #79
  80. 2020 年 5 月 17 日 04:40 | #80
  81. 2020 年 5 月 17 日 05:51 | #81
  82. 2020 年 5 月 17 日 06:16 | #82
  83. 2020 年 5 月 18 日 17:36 | #83
  84. 2020 年 5 月 18 日 17:40 | #84
  85. 2020 年 5 月 18 日 22:07 | #85
  86. 2020 年 5 月 19 日 18:53 | #86
  87. 2020 年 5 月 21 日 05:47 | #87
  88. 2020 年 5 月 23 日 05:29 | #88
  89. 2020 年 5 月 23 日 19:27 | #89
  90. 2020 年 5 月 23 日 22:05 | #90
  91. 2020 年 5 月 24 日 05:07 | #91
  92. 2020 年 5 月 24 日 05:51 | #92
  93. 2020 年 5 月 24 日 06:35 | #93
  94. 2020 年 5 月 24 日 15:37 | #94
  95. 2020 年 5 月 24 日 18:43 | #95
  96. 2020 年 5 月 24 日 21:50 | #96
  97. 2020 年 5 月 25 日 01:25 | #97
  98. 2020 年 5 月 25 日 03:37 | #98
  99. 2020 年 5 月 25 日 07:40 | #99
  100. 2020 年 5 月 25 日 07:52 | #100
  101. 2020 年 5 月 25 日 12:04 | #101
  102. 2020 年 5 月 25 日 17:23 | #102
  103. 2020 年 5 月 25 日 22:05 | #103
  104. 2020 年 6 月 4 日 17:16 | #104
  105. 2020 年 6 月 6 日 15:59 | #105
  106. 2020 年 6 月 6 日 17:20 | #106
  107. 2020 年 6 月 7 日 05:41 | #107
  108. 2020 年 6 月 7 日 06:41 | #108
  109. 2020 年 6 月 8 日 05:17 | #109
  110. 2020 年 6 月 10 日 16:44 | #110
  111. 2020 年 6 月 10 日 17:20 | #111
  112. 2020 年 6 月 10 日 20:33 | #112
  113. 2020 年 6 月 10 日 21:11 | #113
  114. 2020 年 6 月 10 日 23:08 | #114
  115. 2020 年 6 月 15 日 18:37 | #115
  116. 2020 年 6 月 17 日 05:01 | #116
  117. 2020 年 6 月 17 日 05:56 | #117
  118. 2020 年 6 月 17 日 07:31 | #118
  119. 2020 年 6 月 17 日 08:11 | #119
  120. 2020 年 6 月 17 日 09:50 | #120
  121. 2020 年 6 月 17 日 10:10 | #121
  122. 2020 年 6 月 17 日 12:53 | #122
  123. 2020 年 6 月 17 日 12:59 | #123
  124. 2020 年 6 月 17 日 14:55 | #124
  125. 2020 年 6 月 17 日 17:02 | #125
  126. 2020 年 6 月 17 日 18:23 | #126
  127. 2020 年 6 月 17 日 20:11 | #127
  128. 2020 年 6 月 18 日 18:54 | #128
  129. 2020 年 6 月 19 日 15:42 | #129
  130. 2020 年 6 月 24 日 06:20 | #130
  131. 2020 年 6 月 25 日 18:36 | #131
  132. 2020 年 6 月 26 日 18:25 | #132
  133. 2020 年 6 月 28 日 06:26 | #133
  134. 2020 年 6 月 30 日 00:22 | #134
  135. 2020 年 6 月 30 日 20:21 | #135
  136. 2020 年 6 月 30 日 20:38 | #136
  137. 2020 年 6 月 30 日 23:01 | #137
  138. 2020 年 7 月 1 日 16:59 | #138
  139. 2020 年 7 月 1 日 18:53 | #139
  140. 2020 年 7 月 2 日 18:12 | #140
  141. 2020 年 7 月 2 日 18:51 | #141
  142. 2020 年 7 月 3 日 17:40 | #142
  143. 2020 年 7 月 3 日 18:40 | #143
  144. 2020 年 7 月 3 日 19:49 | #144
  145. 2020 年 7 月 5 日 19:12 | #145
  146. 2020 年 7 月 5 日 19:54 | #146
  147. 2020 年 7 月 5 日 21:42 | #147