質問編集履歴
3
追記しました
title
CHANGED
File without changes
|
body
CHANGED
@@ -45,4 +45,24 @@
|
|
45
45
|
WHERE p.age > 100
|
46
46
|
|
47
47
|
HAVING children_ids IS NOT NULL
|
48
|
-
```
|
48
|
+
```
|
49
|
+
###追記
|
50
|
+
`HAVING`では`WHERE`が存在するときの取得がおかしかったです。
|
51
|
+
次のように`WHERE p.age > 1`とすると、ID=1 の子供は 2,5 だけなのに、2,5,4 が取得できてしまいました。
|
52
|
+
```MySQL
|
53
|
+
SELECT p.ID
|
54
|
+
,GROUP_CONCAT(c.person_ID2) AS children_ids
|
55
|
+
|
56
|
+
FROM persons p
|
57
|
+
LEFT JOIN children c ON c.person_ID = p.ID
|
58
|
+
|
59
|
+
WHERE p.age > 1
|
60
|
+
|
61
|
+
HAVING children_ids IS NOT NULL
|
62
|
+
|
63
|
+
```
|
64
|
+
そうなると新たな疑問です。
|
65
|
+
[こちらの質問](https://teratail.com/questions/66463)で、ランキング上位の方が`GROUP BY`ではなく`HAVING`を提案されているのですが、これは間違ったご回答になるのでしょうか?
|
66
|
+
|
67
|
+
しかし的確なご回答ばかりされている方なので、とても間違いだとは思えません。
|
68
|
+
`HAVING`が良い理由を知りたいです。
|
2
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -44,5 +44,5 @@
|
|
44
44
|
|
45
45
|
WHERE p.age > 100
|
46
46
|
|
47
|
-
HAVING
|
47
|
+
HAVING children_ids IS NOT NULL
|
48
48
|
```
|
1
SELECT文一部訂正
title
CHANGED
File without changes
|
body
CHANGED
@@ -25,7 +25,7 @@
|
|
25
25
|
### GROUP BY による方法
|
26
26
|
```MySQL
|
27
27
|
SELECT p.ID
|
28
|
-
,GROUP_CONCAT(
|
28
|
+
,GROUP_CONCAT(c.person_ID2) AS children_ids
|
29
29
|
|
30
30
|
FROM persons p
|
31
31
|
LEFT JOIN children c ON c.person_ID = p.ID
|
@@ -37,7 +37,7 @@
|
|
37
37
|
### HAVING による方法
|
38
38
|
```MySQL
|
39
39
|
SELECT p.ID
|
40
|
-
,GROUP_CONCAT(
|
40
|
+
,GROUP_CONCAT(c.person_ID2) AS children_ids
|
41
41
|
|
42
42
|
FROM persons p
|
43
43
|
LEFT JOIN children c ON c.person_ID = p.ID
|