質問編集履歴

3

追記しました

2021/02/24 17:50

投稿

ThouShaltNot
ThouShaltNot

スコア3

test CHANGED
File without changes
test CHANGED
@@ -93,3 +93,43 @@
93
93
  HAVING children_ids IS NOT NULL
94
94
 
95
95
  ```
96
+
97
+ ###追記
98
+
99
+ `HAVING`では`WHERE`が存在するときの取得がおかしかったです。
100
+
101
+ 次のように`WHERE p.age > 1`とすると、ID=1 の子供は 2,5 だけなのに、2,5,4 が取得できてしまいました。
102
+
103
+ ```MySQL
104
+
105
+ SELECT p.ID
106
+
107
+ ,GROUP_CONCAT(c.person_ID2) AS children_ids
108
+
109
+
110
+
111
+ FROM persons p
112
+
113
+ LEFT JOIN children c ON c.person_ID = p.ID
114
+
115
+
116
+
117
+ WHERE p.age > 1
118
+
119
+
120
+
121
+ HAVING children_ids IS NOT NULL
122
+
123
+
124
+
125
+ ```
126
+
127
+ そうなると新たな疑問です。
128
+
129
+ [こちらの質問](https://teratail.com/questions/66463)で、ランキング上位の方が`GROUP BY`ではなく`HAVING`を提案されているのですが、これは間違ったご回答になるのでしょうか?
130
+
131
+
132
+
133
+ しかし的確なご回答ばかりされている方なので、とても間違いだとは思えません。
134
+
135
+ `HAVING`が良い理由を知りたいです。

2

修正

2021/02/24 17:50

投稿

ThouShaltNot
ThouShaltNot

スコア3

test CHANGED
File without changes
test CHANGED
@@ -90,6 +90,6 @@
90
90
 
91
91
 
92
92
 
93
- HAVING ids IS NOT NULL
93
+ HAVING children_ids IS NOT NULL
94
94
 
95
95
  ```

1

SELECT文一部訂正

2021/02/24 17:44

投稿

ThouShaltNot
ThouShaltNot

スコア3

test CHANGED
File without changes
test CHANGED
@@ -52,7 +52,7 @@
52
52
 
53
53
  SELECT p.ID
54
54
 
55
- ,GROUP_CONCAT(id) AS ids
55
+ ,GROUP_CONCAT(c.person_ID2) AS children_ids
56
56
 
57
57
 
58
58
 
@@ -76,7 +76,7 @@
76
76
 
77
77
  SELECT p.ID
78
78
 
79
- ,GROUP_CONCAT(id) AS ids
79
+ ,GROUP_CONCAT(c.person_ID2) AS children_ids
80
80
 
81
81
 
82
82