質問編集履歴
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
修正
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文一部訂正
test
CHANGED
File without changes
|
test
CHANGED
@@ -52,7 +52,7 @@
|
|
52
52
|
|
53
53
|
SELECT p.ID
|
54
54
|
|
55
|
-
,GROUP_CONCAT(
|
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(
|
79
|
+
,GROUP_CONCAT(c.person_ID2) AS children_ids
|
80
80
|
|
81
81
|
|
82
82
|
|