mysql嵌套子查询Materialization(物化)影响
问题
在select嵌套子select时,出现group by 失效的情况
原始数据
id |
t1 |
t2 |
t3 |
t4 |
created_at |
3 |
1 |
11 |
|
|
2021-06-20 21:00:01.540233 |
4 |
1 |
22 |
|
|
2021-06-20 21:00:06.557704 |
5 |
1 |
33 |
|
|
2021-06-20 21:00:19.692238 |
6 |
2 |
11 |
|
|
2021-06-20 21:00:24.792786 |
7 |
2 |
22 |
|
|
2021-06-20 21:00:30.355809 |
8 |
2 |
33 |
|
|
2021-06-20 21:00:35.397191 |
预计结果
id |
t1 |
t2 |
t3 |
t4 |
created_at |
3 |
1 |
11 |
|
|
2021-06-20 21:00:01.540233 |
6 |
2 |
11 |
|
|
2021-06-20 21:00:24.792786 |
验证
SQL
SELECT
*
FROM
test
WHERE
id IN (
SELECT
id
FROM
test
GROUP BY
t1)
结果
id |
t1 |
t2 |
t3 |
t4 |
created_at |
3 |
1 |
11 |
|
|
2021-06-20 21:00:01.540233 |
4 |
1 |
22 |
|
|
2021-06-20 21:00:06.557704 |
5 |
1 |
33 |
|
|
2021-06-20 21:00:19.692238 |
6 |
2 |
11 |
|
|
2021-06-20 21:00:24.792786 |
7 |
2 |
22 |
|
|
2021-06-20 21:00:30.355809 |
8 |
2 |
33 |
|
|
2021-06-20 21:00:35.397191 |
原因
Materialization(物化),in子查询确实会忽略group/order by,比如加having进去,就会报错
正确SQL
SELECT
*
FROM
test
WHERE
id IN (
SELECT
*
FROM
( SELECT id FROM test GROUP BY t1 ) t)
结果
id |
t1 |
t2 |
t3 |
t4 |
created_at |
3 |
1 |
11 |
|
|
2021-06-20 21:00:01.540233 |
6 |
2 |
11 |
|
|
2021-06-20 21:00:24.792786 |
物化相关文章
http://mysql.taobao.org/monthly/2016/07/08/