config root man

Current Path : /home/usr.opt/mysql57/mysql-test/r/

FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64
Upload File :
Current File : //home/usr.opt/mysql57/mysql-test/r/group_by_fd_ps_prot.result

set optimizer_trace_max_mem_size=1048576;
set end_markers_in_json=on;
set optimizer_trace="enabled=on";
SET @old_sql_mode = @@sql_mode;
SET @@sql_mode='ONLY_FULL_GROUP_BY';
Warnings:
Warning	3090	Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
#
# Bug#16021396 ONLY_FULL_GROUP_BY REJECTS VALID QUERY USING VIEW
#
create table t1(a int, b int, c int) engine=InnoDB;
create algorithm=merge view v1 as select t1.a*2 as a, t1.b*2 as b, t1.c*2 as c from t1;
show create view v1;
View	Create View	character_set_client	collation_connection
v1	CREATE ALGORITHM=MERGE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select (`t1`.`a` * 2) AS `a`,(`t1`.`b` * 2) AS `b`,(`t1`.`c` * 2) AS `c` from `t1`	latin1	latin1_swedish_ci
select sin(b) as z from t1 group by sin(b);
z
select sin(b) as z from v1 group by sin(b);
z
select sin(b) as z from t1 group by b;
z
select sin(b) as z from v1 group by b;
z
select sin(b) as z from v1 group by z;
z
drop view v1;
create algorithm=temptable view v1 as select t1.a*2 as a, t1.b*2 as b, t1.c*2 as c from t1;
show create view v1;
View	Create View	character_set_client	collation_connection
v1	CREATE ALGORITHM=TEMPTABLE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select (`t1`.`a` * 2) AS `a`,(`t1`.`b` * 2) AS `b`,(`t1`.`c` * 2) AS `c` from `t1`	latin1	latin1_swedish_ci
select sin(b) as z from t1 group by sin(b);
z
select sin(b) as z from v1 group by sin(b);
z
select sin(b) as z from t1 group by b;
z
select sin(b) as z from v1 group by b;
z
select sin(b) as z from v1 group by z;
z
drop view v1;
drop table t1;
# From testcase of Bug#16903135:
CREATE TABLE group_by_test2 (
id int unsigned primary key,
cat int unsigned not null,
name varchar(10),
num int unsigned
);
INSERT INTO group_by_test2 (id,cat,name,num) VALUES
(1,10,'foo',2),
(2,11,'foo',1),
(3,22,'bar',3),
(4,23,'bar',7),
(5,34,'test',7);
SELECT
cat,
name,
SUM(num)
FROM
group_by_test2
GROUP BY
cat;
ERROR 42000: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.group_by_test2.name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
ALTER TABLE group_by_test2 ADD UNIQUE INDEX (cat);
SELECT
cat,
name,
SUM(num)
FROM
group_by_test2
GROUP BY
cat;
cat	name	SUM(num)
10	foo	2
11	foo	1
22	bar	3
23	bar	7
34	test	7
SELECT
cat,
name,
SUM(num)
FROM
group_by_test2
GROUP BY
cat WITH ROLLUP;
ERROR 42000: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.group_by_test2.name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
# Expressions of group columns are ok:
SELECT
cat,
length(cat),
SUM(num)
FROM
group_by_test2
GROUP BY
cat
WITH ROLLUP;
cat	length(cat)	SUM(num)
10	2	2
11	2	1
22	2	3
23	2	7
34	2	7
NULL	NULL	20
DROP TABLE group_by_test2;
# Test from Bug #18993257 SELECT AGGR + NON-AGGR FROM JOIN WITH VIEW IS NOT REJECTED BY ONLY_FULL_GROUP_BY
CREATE TABLE t1 (
col_int_key INT,
col_varchar_key VARCHAR(1)
);
CREATE TABLE t2 (
pk INTEGER,
col_int_key INTEGER
);
CREATE VIEW view_b AS SELECT * FROM t2;
SELECT MIN( alias2.col_int_key ),
alias2.col_int_key
FROM t1 AS alias1, t2 AS alias2
WHERE alias1.col_int_key IS NULL;
ERROR 42000: In aggregated query without GROUP BY, expression #2 of SELECT list contains nonaggregated column 'test.alias2.col_int_key'; this is incompatible with sql_mode=only_full_group_by
# Same with view:
SELECT MIN( alias2.col_int_key ),
alias2.col_int_key
FROM t1 AS alias1, view_b AS alias2
WHERE alias1.col_int_key IS NULL;
ERROR 42000: In aggregated query without GROUP BY, expression #2 of SELECT list contains nonaggregated column 'alias2.col_int_key'; this is incompatible with sql_mode=only_full_group_by
DROP TABLE t1, t2;
DROP VIEW view_b;
#
# WL#2489; Recognizing some functional dependencies
#
create table t1(
a int,
b int not null,
c int not null,
d int,
unique key(b,c),
unique key(b,d)
);
select sin(a) as z from t1 group by b;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select sin(a) as z from t1 group by d,b;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
# {b,c} UNIQUE NOT NULL => {c,b}->a
select sin(a) as z from t1 group by c,b;
z
select sin(a+b*c) as z from t1 group by c,b;
z
# In PS mode, we see nothing below, because only_full_group_by
# checks are done at PREPARE, whereas trace below is from EXECUTE.
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
# With outer references:
select (select sin(a)) as z from t1 group by d,b;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select (select sin(a)) as z from t1 group by c,b;
z
# If key columns are in function, functional dependency disappears
select sin(a) as z from t1 group by c*2,b*2;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
# FDs are recognized, like in SQL standard:
# b=2 => c->{b,c} => c->a as (b,c) is unique not null.
select sin(a) as z from t1 where b=2 group by c;
z
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
# t2.a=t1.a => {t1.b,t1.c}->t2.a
select sin(t2.a) as z from t1, t1 as t2
where t2.a=t1.a group by t1.b,t1.c;
z
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
# t2.b=t1.b and t2.c=t1.c => {t1.b,t1.c}->{all cols of t2}
select sin(t2.a) as z from t1, t1 as t2
where t2.b=t1.b and t2.c=t1.c group by t1.b,t1.c;
z
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
# t2.b=t1.b and t2.c=t1.c => {t1.b,t1.c}->{all cols of t2}
# Moreover, {t1.b,t1.c}->{t1.d}.
# So t3.b=t2.b and t3.c=t1.d => {t1.b,t1.c}->{all cols of t3}.
select t3.a from t1, t1 as t2, t1 as t3
where
t3.b=t2.b and t3.c=t1.d and
t2.b=t1.b and t2.c=t1.c
group by t1.b,t1.c;
a
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
# 3 tables:
# {t1.b,t1.c}->{t1.*}->{t2.b,t2.c}->{t2.*}->{t3.pk}->{t3.b}
create table t3(pk int primary key, b int);
select t3.b from  t1,t1 as t2,t3
where t3.pk=t2.d and t2.b=t1.b and t2.c=t1.a
group by t1.b,t1.c;
b
drop table t3;
# With subq
select (select t1.b from t1
where t2.b=t1.b
group by t1.a) from t1 as t2;
(select t1.b from t1
where t2.b=t1.b
group by t1.a)
# Outer join.
create table t2 like t1;
delete from t1;
insert into t1 (a,b) values(1,10),(2,20);
Warnings:
Warning	1364	Field 'c' doesn't have a default value
insert into t2 (a,b) values(1,-10);
Warnings:
Warning	1364	Field 'c' doesn't have a default value
# In result, t2.a is NULL for both rows, values of t1.a are 1 and 2
select t1.a,t2.a from t1 left join t2 on t2.a=t1.a and t2.b=t1.b;
a	a
1	NULL
2	NULL
# So this query would choose one arbitrary value of t1.a - wrong:
select t1.a from t1 left join t2 on t2.a=t1.a and t2.b=t1.b group by t2.a;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
# Also problem for FD with constant:
select t1.a,t2.a from t1 left join t2 on 42=t1.a and t2.b=t1.b;
a	a
1	NULL
2	NULL
select t1.a from t1 left join t2 on 42=t1.a and t2.b=t1.b group by t2.a;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select t1.a from t1 left join t2 on t2.b=t1.a group by t2.b;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select t1.a from t1 left join t2 on 42=t1.a group by t2.a;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select t1.c from t1 left join t2 on t1.a=t1.c group by t1.a;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t1.c' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select t1.b from t1 left join t2 on t1.c=t1.b and t1.a=t1.c group by t1.a;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t1.b' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select t1.a,t2.c from t1 left join t2 on t1.a=t2.c
and cos(t2.c+t2.b)>0.5 and sin(t1.a+t2.d)<0.9 group by t1.a;
a	c
1	NULL
2	NULL
# with keys:
select t1.a,t2.d from t1 left join t2 on t1.a=t2.c and t1.d=t2.b
and cos(t2.c+t2.b)>0.5 and sin(t1.a+t2.d)<0.9 group by t1.a,t1.d;
a	d
1	NULL
2	NULL
# with non-determinism:
select t1.a,t2.c from t1 left join t2 on t1.a=t2.c
and cos(t2.c+rand())>0.5 group by t1.a;
ERROR 42000: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t2.c' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select t1.a, ANY_VALUE(t2.c) from t1 left join t2 on t1.a=t2.c
and cos(t2.c+rand())>0.5 group by t1.a;
a	ANY_VALUE(t2.c)
1	NULL
2	NULL
# with parameter:
prepare s from 'select t1.a,t2.c from t1 left join t2 on t1.a=t2.c
and cos(t2.c+ ? )>0.5 group by t1.a';
execute s using @dummy;
a	c
1	NULL
2	NULL
# No OR
select t1.a,t2.c from t1 left join t2 on t1.a=t2.c
and cos(t2.c+t2.b)>0.5 OR sin(t2.d)<0.9 group by t1.a;
ERROR 42000: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t2.c' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
# With subq
select t2.b from t1 left join t1 as t2 on t1.a=t2.b and t1.b group by t1.a;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t2.b' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select t2.b from t1 left join t1 as t2 on t1.a=t2.b and (select t1.b) group by t1.a;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t2.b' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
# Test ANY_VALUE:
select ANY_VALUE(t1.b) from t1 left join t2 on t1.c=t1.b and t1.a=t1.c group by t1.a;
ANY_VALUE(t1.b)
10
20
select 3+(5*t1.b) from t1 left join t2 on t1.c=t1.b and t1.a=t1.c group by t1.a;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t1.b' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select 3+(5*ANY_VALUE(t1.b)) from t1 left join t2 on t1.c=t1.b and t1.a=t1.c group by t1.a;
3+(5*ANY_VALUE(t1.b))
53
103
delete from t1;
insert into t1 (a,b) values(1,10),(1,20),(2,30),(2,40);
Warnings:
Warning	1364	Field 'c' doesn't have a default value
select a, sum(b) from t1;
ERROR 42000: In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'test.t1.a'; this is incompatible with sql_mode=only_full_group_by
select any_value(a), sum(b) from t1;
any_value(a)	sum(b)
1	100
# different order of input rows, different "any_value":
select any_value(a), sum(b) from (select * from t1 order by a desc) as d;
any_value(a)	sum(b)
1	100
select a,b,sum(c) from t1 group by a;
ERROR 42000: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t1.b' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select a,any_value(b),sum(c) from t1 group by a;
a	any_value(b)	sum(c)
1	10	0
2	30	0
select a,any_value(b),sum(c)
from (select * from t1 order by a desc, b desc) as d
group by a;
a	any_value(b)	sum(c)
1	10	0
2	30	0
# With view.
set @optimizer_switch_saved=@@optimizer_switch;
# Merged view
create algorithm=merge view v1 as select t1.a*2 as a, t1.b as b, t1.c as c, t1.d as d, t1.a as e from t1;
show create view v1;
View	Create View	character_set_client	collation_connection
v1	CREATE ALGORITHM=MERGE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select (`t1`.`a` * 2) AS `a`,`t1`.`b` AS `b`,`t1`.`c` AS `c`,`t1`.`d` AS `d`,`t1`.`a` AS `e` from `t1`	latin1	latin1_swedish_ci
select sin(a) as z from v1 group by b;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'v1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select sin(a) as z from v1 group by d,b;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'v1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select sin(a) as z from v1 group by c,b;
z
0.9092974268256817
0.9092974268256817
-0.7568024953079282
-0.7568024953079282
select (select sin(a)) as z from v1 group by d,b;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'v1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select (select sin(a)) as z from v1 group by c,b;
z
0.9092974268256817
0.9092974268256817
-0.7568024953079282
-0.7568024953079282
select sin(a) as z from t1 group by c*2,b*2;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select sin(a+b*c) as z from v1 group by c,b;
z
0.9092974268256817
0.9092974268256817
-0.7568024953079282
-0.7568024953079282
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
select sin(a) as z from v1 where b=2 group by c;
z
# {v1.b,v1.c}->v1.a->t2.a
select sin(t2.a) as z from v1, v1 as t2
where t2.a=v1.a group by v1.b,v1.c;
z
0.9092974268256817
0.9092974268256817
-0.7568024953079282
-0.7568024953079282
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
select sin(t2.a) as z from v1, v1 as t2
where t2.b=v1.b and t2.c=v1.c group by v1.b,v1.c;
z
0.9092974268256817
0.9092974268256817
-0.7568024953079282
-0.7568024953079282
# With materialized view we get more dependencies than needed, due to implementation.
select t3.a from v1, v1 as t2, v1 as t3
where
t3.b=t2.b and t3.c=v1.d and
t2.b=v1.b and t2.c=v1.c
group by v1.b,v1.c;
a
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
# If we simply went to real_item(), we would have WHERE 2*a=b, or
# GROUP BY 2*t1.a, so we would not find FDs. The original item
# (direct_view_ref here) must also be considered!
select a from v1 where a=b group by b;
a
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
select b from v1 where a=b group by a;
b
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
select v1.c from v1 where v1.c=v1.a group by v1.a;
c
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
select v1.a from v1 group by v1.e;
a
2
4
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
select v1.c from v1 where v1.c=v1.a group by v1.e;
c
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
# View appears only in WHERE
select t2.d from v1, t1 as t2 where v1.a=t2.d and v1.e=t2.a group by t2.a;
d
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
drop view if exists v1;
# FD due to view's WHERE:
create algorithm=merge view v1 as select t1.a*2 as a, t1.b as b from t1;
select a from v1 group by b;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'v1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
drop view if exists v1;
# Merged view
create algorithm=merge view v1 as select t1.a*2 as a, t1.b as b from t1 where t1.a=t1.b;
select a from v1 group by b;
a
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
drop view if exists v1;
# Aggregates in view
# Aggregates => skipping Merged view
drop view if exists v1;
Warnings:
Note	1051	Unknown table 'test.v1'
# Aggregates + GROUP BY in view
# We group by b*5, to show that it works with GROUP expressions, not only fields.
# Aggregates => skipping Merged view
drop view if exists v1;
Warnings:
Note	1051	Unknown table 'test.v1'
set optimizer_switch=@optimizer_switch_saved;
set @optimizer_switch_saved=@@optimizer_switch;
# Materialized view
create algorithm=temptable view v1 as select t1.a*2 as a, t1.b as b, t1.c as c, t1.d as d, t1.a as e from t1;
show create view v1;
View	Create View	character_set_client	collation_connection
v1	CREATE ALGORITHM=TEMPTABLE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select (`t1`.`a` * 2) AS `a`,`t1`.`b` AS `b`,`t1`.`c` AS `c`,`t1`.`d` AS `d`,`t1`.`a` AS `e` from `t1`	latin1	latin1_swedish_ci
select sin(a) as z from v1 group by b;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'v1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select sin(a) as z from v1 group by d,b;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'v1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select sin(a) as z from v1 group by c,b;
z
0.9092974268256817
0.9092974268256817
-0.7568024953079282
-0.7568024953079282
select (select sin(a)) as z from v1 group by d,b;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'v1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select (select sin(a)) as z from v1 group by c,b;
z
0.9092974268256817
0.9092974268256817
-0.7568024953079282
-0.7568024953079282
select sin(a) as z from t1 group by c*2,b*2;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select sin(a+b*c) as z from v1 group by c,b;
z
0.9092974268256817
0.9092974268256817
-0.7568024953079282
-0.7568024953079282
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
select sin(a) as z from v1 where b=2 group by c;
z
# {v1.b,v1.c}->v1.a->t2.a
select sin(t2.a) as z from v1, v1 as t2
where t2.a=v1.a group by v1.b,v1.c;
z
0.9092974268256817
0.9092974268256817
-0.7568024953079282
-0.7568024953079282
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
select sin(t2.a) as z from v1, v1 as t2
where t2.b=v1.b and t2.c=v1.c group by v1.b,v1.c;
z
0.9092974268256817
0.9092974268256817
-0.7568024953079282
-0.7568024953079282
# With materialized view we get more dependencies than needed, due to implementation.
select t3.a from v1, v1 as t2, v1 as t3
where
t3.b=t2.b and t3.c=v1.d and
t2.b=v1.b and t2.c=v1.c
group by v1.b,v1.c;
a
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
# If we simply went to real_item(), we would have WHERE 2*a=b, or
# GROUP BY 2*t1.a, so we would not find FDs. The original item
# (direct_view_ref here) must also be considered!
select a from v1 where a=b group by b;
a
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
select b from v1 where a=b group by a;
b
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
select v1.c from v1 where v1.c=v1.a group by v1.a;
c
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
select v1.a from v1 group by v1.e;
a
2
4
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
select v1.c from v1 where v1.c=v1.a group by v1.e;
c
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
# View appears only in WHERE
select t2.d from v1, t1 as t2 where v1.a=t2.d and v1.e=t2.a group by t2.a;
d
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
drop view if exists v1;
# FD due to view's WHERE:
create algorithm=temptable view v1 as select t1.a*2 as a, t1.b as b from t1;
select a from v1 group by b;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'v1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
drop view if exists v1;
# Materialized view
create algorithm=temptable view v1 as select t1.a*2 as a, t1.b as b from t1 where t1.a=t1.b;
select a from v1 group by b;
a
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
drop view if exists v1;
# Aggregates in view
# Materialized view
create algorithm=temptable view v1 as select sum(t1.a) as a, sum(t1.b) as b from t1;
select a from v1 group by b;
a
6
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
drop view if exists v1;
# Aggregates + GROUP BY in view
# We group by b*5, to show that it works with GROUP expressions, not only fields.
# Materialized view
create algorithm=temptable view v1 as select a, b*5 as b, sum(t1.c) as c, sum(t1.d) as d from t1 group by a,b*5;
select a from v1 group by b;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'v1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select c from v1 group by b;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'v1.c' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select c from v1 group by b,d;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'v1.c' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select a,c from v1 group by a;
ERROR 42000: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'v1.c' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select d,c from v1 group by b,a;
d	c
NULL	0
NULL	0
NULL	0
NULL	0
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
drop view if exists v1;
set optimizer_switch=@optimizer_switch_saved;
set @optimizer_switch_saved=@@optimizer_switch;
# Materialized derived table
set optimizer_switch='derived_merge=off';
select sin(a) as z from (select t1.a*2 as a, t1.b as b, t1.c as c, t1.d as d, t1.a as e from t1) as v1 group by b;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'v1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select sin(a) as z from (select t1.a*2 as a, t1.b as b, t1.c as c, t1.d as d, t1.a as e from t1) as v1 group by d,b;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'v1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select sin(a) as z from (select t1.a*2 as a, t1.b as b, t1.c as c, t1.d as d, t1.a as e from t1) as v1 group by c,b;
z
0.9092974268256817
0.9092974268256817
-0.7568024953079282
-0.7568024953079282
select (select sin(a)) as z from (select t1.a*2 as a, t1.b as b, t1.c as c, t1.d as d, t1.a as e from t1) as v1 group by d,b;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'v1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select (select sin(a)) as z from (select t1.a*2 as a, t1.b as b, t1.c as c, t1.d as d, t1.a as e from t1) as v1 group by c,b;
z
0.9092974268256817
0.9092974268256817
-0.7568024953079282
-0.7568024953079282
select sin(a) as z from t1 group by c*2,b*2;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select sin(a+b*c) as z from (select t1.a*2 as a, t1.b as b, t1.c as c, t1.d as d, t1.a as e from t1) as v1 group by c,b;
z
0.9092974268256817
0.9092974268256817
-0.7568024953079282
-0.7568024953079282
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
select sin(a) as z from (select t1.a*2 as a, t1.b as b, t1.c as c, t1.d as d, t1.a as e from t1) as v1 where b=2 group by c;
z
# {v1.b,v1.c}->v1.a->t2.a
select sin(t2.a) as z from (select t1.a*2 as a, t1.b as b, t1.c as c, t1.d as d, t1.a as e from t1) as v1, (select t1.a*2 as a, t1.b as b, t1.c as c, t1.d as d, t1.a as e from t1) as t2
where t2.a=v1.a group by v1.b,v1.c;
z
0.9092974268256817
0.9092974268256817
-0.7568024953079282
-0.7568024953079282
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
select sin(t2.a) as z from (select t1.a*2 as a, t1.b as b, t1.c as c, t1.d as d, t1.a as e from t1) as v1, (select t1.a*2 as a, t1.b as b, t1.c as c, t1.d as d, t1.a as e from t1) as t2
where t2.b=v1.b and t2.c=v1.c group by v1.b,v1.c;
z
0.9092974268256817
0.9092974268256817
-0.7568024953079282
-0.7568024953079282
# With materialized view we get more dependencies than needed, due to implementation.
select t3.a from (select t1.a*2 as a, t1.b as b, t1.c as c, t1.d as d, t1.a as e from t1) as v1, (select t1.a*2 as a, t1.b as b, t1.c as c, t1.d as d, t1.a as e from t1) as t2, (select t1.a*2 as a, t1.b as b, t1.c as c, t1.d as d, t1.a as e from t1) as t3
where
t3.b=t2.b and t3.c=v1.d and
t2.b=v1.b and t2.c=v1.c
group by v1.b,v1.c;
a
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
# If we simply went to real_item(), we would have WHERE 2*a=b, or
# GROUP BY 2*t1.a, so we would not find FDs. The original item
# (direct_view_ref here) must also be considered!
select a from (select t1.a*2 as a, t1.b as b, t1.c as c, t1.d as d, t1.a as e from t1) as v1 where a=b group by b;
a
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
select b from (select t1.a*2 as a, t1.b as b, t1.c as c, t1.d as d, t1.a as e from t1) as v1 where a=b group by a;
b
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
select v1.c from (select t1.a*2 as a, t1.b as b, t1.c as c, t1.d as d, t1.a as e from t1) as v1 where v1.c=v1.a group by v1.a;
c
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
select v1.a from (select t1.a*2 as a, t1.b as b, t1.c as c, t1.d as d, t1.a as e from t1) as v1 group by v1.e;
a
2
4
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
select v1.c from (select t1.a*2 as a, t1.b as b, t1.c as c, t1.d as d, t1.a as e from t1) as v1 where v1.c=v1.a group by v1.e;
c
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
# View appears only in WHERE
select t2.d from (select t1.a*2 as a, t1.b as b, t1.c as c, t1.d as d, t1.a as e from t1) as v1, t1 as t2 where v1.a=t2.d and v1.e=t2.a group by t2.a;
d
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
drop view if exists v1;
Warnings:
Note	1051	Unknown table 'test.v1'
# FD due to view's WHERE:
select a from (select t1.a*2 as a, t1.b as b from t1) as v1 group by b;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'v1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
drop view if exists v1;
Warnings:
Note	1051	Unknown table 'test.v1'
# Derived table
select a from (select t1.a*2 as a, t1.b as b from t1 where t1.a=t1.b) as v1 group by b;
a
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
drop view if exists v1;
Warnings:
Note	1051	Unknown table 'test.v1'
# Aggregates in view
# Derived table
select a from (select sum(t1.a) as a, sum(t1.b) as b from t1) as v1 group by b;
a
6
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
drop view if exists v1;
Warnings:
Note	1051	Unknown table 'test.v1'
# Aggregates + GROUP BY in view
# We group by b*5, to show that it works with GROUP expressions, not only fields.
# Derived table
select a from (select a, b*5 as b, sum(t1.c) as c, sum(t1.d) as d from t1 group by a,b*5) as v1 group by b;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'v1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select c from (select a, b*5 as b, sum(t1.c) as c, sum(t1.d) as d from t1 group by a,b*5) as v1 group by b;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'v1.c' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select c from (select a, b*5 as b, sum(t1.c) as c, sum(t1.d) as d from t1 group by a,b*5) as v1 group by b,d;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'v1.c' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select a,c from (select a, b*5 as b, sum(t1.c) as c, sum(t1.d) as d from t1 group by a,b*5) as v1 group by a;
ERROR 42000: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'v1.c' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select d,c from (select a, b*5 as b, sum(t1.c) as c, sum(t1.d) as d from t1 group by a,b*5) as v1 group by b,a;
d	c
NULL	0
NULL	0
NULL	0
NULL	0
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
drop view if exists v1;
Warnings:
Note	1051	Unknown table 'test.v1'
set optimizer_switch=@optimizer_switch_saved;
# Derived table in merged view
create algorithm=temptable view v2
as select a as a, 2*a as b from t1;
create algorithm=merge view v1
as select v2.a as a, 3*v2.b as b from v2;
select v1.b from v1 group by v1.a;
b
6
12
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
select t2.a from t1 as t2, v1 where t2.a=v1.b group by v1.a;
a
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
# FDs in a view are those of the underlying query expression.
# FDs in a query expression: expressions in the SELECT list must be
# deterministic.
drop view v1;
create algorithm=merge view v1
as select v2.a as a, rand()*v2.b as b from v2;
select v1.b from v1 group by v1.a;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'v1.b' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
drop view v1;
create algorithm=temptable view v1
as select v2.a as a, rand()*v2.b as b from v2;
select v1.b from v1 group by v1.a;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'v1.b' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
drop view v1,v2;
# Item_direct_view_ref pointing to Item_direct_view_ref pointing to
# Item_field (a rare case!)
create algorithm=merge view v2 as select 2*a as a, 2*b as b from t1;
create algorithm=merge view v1 as select a, 3*b as b from v2 where a=b;
select 1 from (select a,b+0 from v1 group by a) as d;
1
drop view v1,v2;
# Some fun cases with aggregates in derived table.
# Inner query is valid: t1.a -> t1.b (equality in WHERE). Outer query:
# d.b -> t1.b (underlying column of d.b) -> t1.a (equality)
# -> sum(1) (because t1.a is all group columns so determines
# sum()) -> d.s (because sum() is underlying of d.s)
select d.s from
(select b, sum(1) as s from t1 where a=b group by a) as d
group by d.b;
s
alter table t1 add column pk int primary key auto_increment;
# Inner query: t1.pk -> t1.* (pk). Outer query:
# d.b,d.c -> t1.b,t1.c (their underlying columns) -> t1.pk (because
# t1.b,t1.c is unique) -> sum(1) (because t1.pk is all group columns so
# determines sum()) -> d.s (because sum() is underlying of d.s)
select d.s from
(select b, c, sum(d) as s from t1 group by pk) as d
group by d.b,d.c;
s
NULL
NULL
NULL
NULL
# Outer query:
# d.c -> t1.b*3 (underlying column of d.c) -> sum(a) (because t1.b*3
# is all group expressions) -> d.s
select d.s from
(select b*3 as c, sum(a) as s from t1 group by b*3) as d
group by d.c;
s
1
1
2
2
drop table t1,t2;
# Testcase from Reviewers
create table customer1(pk int primary key, a int);
create table customer2(pk int primary key, b int);
CREATE algorithm=merge VIEW customer as SELECT pk,a,b
FROM customer1 JOIN customer2 USING (pk);
select customer.pk, customer.b
from customer
group by customer.pk;
pk	b
# View is merged. Show FDs. Note that in --ps-protocol, the trace
# is that of execution, so contains no group-by checks.
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
drop view customer;
CREATE algorithm=temptable VIEW customer as SELECT pk,a,b
FROM customer1 JOIN customer2 USING (pk);
select customer.pk, customer.b
from customer
group by customer.pk;
pk	b
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
# Benefit from outer-join-to-inner conversion.
insert into customer1 values(0,10),(1,20);
insert into customer2 values(0,10),(1,20);
# 1) no conversion, no FD from customer2.b to customer1.a.
explain select customer1.a, count(*)
from customer1 left join customer2 on customer1.a=customer2.b
where customer1.pk in (7,9)
group by customer2.b;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.customer1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
# 2) null-complemented row can't pass WHERE => conversion
# => FD from customer2.b to customer1.a.
explain select customer1.a, count(*)
from customer1 left join customer2 on customer1.a=customer2.b
where customer2.pk in (7,9)
group by customer2.b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	customer1	NULL	ALL	NULL	NULL	NULL	NULL	2	100.00	Using temporary; Using filesort
1	SIMPLE	customer2	NULL	range	PRIMARY	PRIMARY	4	NULL	2	50.00	Using where; Using join buffer (Block Nested Loop)
Warnings:
Note	1003	/* select#1 */ select `test`.`customer1`.`a` AS `a`,count(0) AS `count(*)` from `test`.`customer1` join `test`.`customer2` where ((`test`.`customer2`.`b` = `test`.`customer1`.`a`) and (`test`.`customer2`.`pk` in (7,9))) group by `test`.`customer2`.`b`
drop table customer1,customer2;
drop view customer;
# FDs of JOIN...USING and NATURAL JOIN
create table t1(pk int primary key, a int);
create table t2(pk int primary key, b int);
select t1.pk, t1.a from t1 join t2 on t1.pk=t2.pk group by t1.pk;
pk	a
select t1.pk, t1.a from t1 join t2 using(pk) group by t1.pk;
pk	a
select t1.pk, t1.a from t1 natural join t2 group by t1.pk;
pk	a
select t1.pk, t1.a from t1 left join t2 using(pk) group by t1.pk;
pk	a
select t1.pk, t1.a from t1 natural left join t2 group by t1.pk;
pk	a
select t1.pk, t2.b from t1 join t2 on t1.pk=t2.pk group by t1.pk;
pk	b
select t1.pk, t2.b from t1 join t2 using(pk) group by t1.pk;
pk	b
select t1.pk, t2.b from t1 natural join t2 group by t1.pk;
pk	b
select t1.pk, t2.b from t1 left join t2 using(pk) group by t1.pk;
pk	b
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
select t1.pk, t2.b from t1 natural left join t2 group by t1.pk;
pk	b
# Equivalent queries, with RIGHT JOIN
select t1.pk, t2.b from t2 right join t1 using(pk) group by t1.pk;
pk	b
select t1.pk, t2.b from t2 natural right join t1 group by t1.pk;
pk	b
select t1.pk, t2.b from t1 left join t2 on t1.pk>t2.pk group by t1.pk;
ERROR 42000: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t2.b' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
# Even in --ps-protocol we see the group-by checks in trace because
# there has been no execution (due to error).
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
"functional_dependencies_of_GROUP_columns": {
              "all_columns_of_table_map_bits": [
                0
              ] /* all_columns_of_table_map_bits */,
              "columns": [
                "test.t1.pk"
              ] /* columns */
            } 
select t1.pk, t2.b from t2 right join t1 on t1.pk>t2.pk group by t1.pk;
ERROR 42000: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t2.b' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
drop table t1,t2;
# Cases where FDs from weak side do not propagate
create table t1(a int, b int);
insert into t1 values(null,0),(null,1);
select d.a,d.c
from t1 left join (select a, coalesce(a,3) as c from t1) as d
on t1.b>0;
a	c
NULL	3
NULL	3
NULL	NULL
# Now group it by d.a:
select d.a,d.c
from t1 left join (select a, coalesce(a,3) as c from t1) as d
on t1.b>0 group by d.a;
ERROR 42000: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'd.c' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
"functional_dependencies_of_GROUP_columns": {
              "columns": [
                "d.a"
              ] /* columns */
            } 
select d.a,d.c
from t1 left join (select a, count(a) as c from t1 group by a) as d
on t1.b+d.c>0;
a	c
NULL	0
NULL	NULL
# Now group it by d.a:
select d.a,d.c
from t1 left join (select a, count(a) as c from t1 group by a) as d
on t1.b+d.c>0 group by d.a;
ERROR 42000: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'd.c' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
"functional_dependencies_of_GROUP_columns": {
              "columns": [
                "d.a"
              ] /* columns */,
              "searched_in_materialized_tables": [
                {
                  "table": " `d`",
                  "columns": [
                    "test.t1.a"
                  ] /* columns */,
                  "all_group_expressions": true
                }
              ] /* searched_in_materialized_tables */
            } 
select d.m,d.c
from t1 left join (select max(a) as m, count(a) as c from t1) as d
on t1.b+d.c>0;
m	c
NULL	0
NULL	NULL
# Now group it by d.m:
select d.m,d.c
from t1 left join (select max(a) as m, count(a) as c from t1) as d
on t1.b+d.c>0 group by d.m;
ERROR 42000: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'd.c' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
"functional_dependencies_of_GROUP_columns": {
              "columns": [
                "d.m"
              ] /* columns */,
              "searched_in_materialized_tables": [
                {
                  "table": " `d`"
                }
              ] /* searched_in_materialized_tables */
            } 
# Now group it by d.c which is non-nullable:
select d.m,d.c
from t1 left join (select max(a) as m, count(a) as c from t1) as d
on t1.b+d.c>0 group by d.c;
m	c
NULL	NULL
NULL	0
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
drop table t1;
create table t1(pk int primary key, a int);
# Not valid per the standard, because:
# 1) In t3, t3.pk->t3.a holds.
# 2) In R1 the result of "(t2 left join t3 on 1)", t3.pk->t3.a
# holds, by application of: there is a functional dependency in the
# weak side t3, and t3.pk is not nullable in t3.
# 3) In R2 the result of "t1 left join (t2 left join t3 on 1) on 1",
# t3.pk->t3.a doesn't hold anymore, because: it's a dependency in the
# weak side (weak side is R1), and t3.pk is nullable _when
# seen as a column of R1_ (in R1 t3.pk can be NULL, if the row of t3
# is actually a null-complemented one).
# But for us it is valid, because we have refined the logic: the
# pk-based FD satisfies the requirement that a NULL value of t3.pk
# implies a NULL value of t3.a (indeed, the NULL value of t3.pk can
# only come from null-complementing of the row of t3 in R1, in which
# case t3.a is also NULL).
select t3.a
from t1 left join (t1 as t2 left join t1 as t3 on 1) on 1
group by t3.pk;
a
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
# Outer reference - why we use resolved_used_tables():
select (select t1.a from t1 as t2 limit 1) from t1 group by pk;
(select t1.a from t1 as t2 limit 1)
# We don't build the FD list if not needed
select t1.a*3 from t1 group by t1.a;
t1.a*3
SELECT show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
show_json_object('"functional_dependencies_of_GROUP_columns": {', TRACE)
NOT FOUND
drop table t1;
# Tricky cases with "ON col=literal" propagating.
create table t1(a int, b int);
insert into t1 values();
insert into t1 values(10,11);
create table t2(c int, d int);
insert into t2 values(2,3);
select t4.d
from t1 left join (t2 as t3 join t2 as t4 on t4.d=3) on t1.a=10;
d
3
NULL
# Equivalent to T1 LJ (T2, T3) ON T4.D=3 AND T1.A=10
# (this is what simplify_joins() does).
# For T4.D=3, DJS is {T1.A} which is not group column.
select t4.d
from t1 left join (t2 as t3 join t2 as t4 on t4.d=3) on t1.a=10 group by "";
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t4.d' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select t4.d
from t1 left join (t2 as t3 left join t2 as t4 on t4.d=3) on t1.a=10;
d
3
NULL
# For T4.D=3, DJS={}, not NULL-friendly, and embedding is on weak side
# so FD cannot propagate.
select t4.d
from t1 left join (t2 as t3 left join t2 as t4 on t4.d=3) on t1.a=10 group by "";
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t4.d' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
select t4.d
from t1 join (t2 as t3 left join t2 as t4 on t4.d=3) on t1.a=10;
d
3
# For T4.D=3, DJS={}, not NULL-friendly, but embedding is on weak side
# so FD can propagate.
select t4.d
from t1 join (t2 as t3 left join t2 as t4 on t4.d=3) on t1.a=10 group by "";
d
3
# With a view
create view v1 as select a as a, 2*a as b, coalesce(a,3) as c from t1;
select v1.b from t1 left join v1 on 1;
b
NULL
NULL
20
20
# If v1.a is NULL then v1.b is NULL: a->b is NULL-friendly
select v1.b from t1 left join v1 on 1 group by v1.a;
b
NULL
20
select v1.c from t1 left join v1 on 1;
c
3
3
10
10
# If v1.a is NULL then v1.c may not be NULL: a->c is not NULL-friendly
select v1.c from t1 left join v1 on 1 group by v1.a;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'v1.c' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
drop view v1;
# Constant view item
create view v1 as select a as a, 2 as b from t1;
# Because of BUG#17023060, the result is wrong, should be
# [10,2 ; 10,2 ; NULL,NULL], which would show that {}->{v1.b} does not
# hold in the result, even though v1.b is constant (=2) in v1.
select t1.a, v1.b from t1 left join v1 on t1.a is not null;
a	b
10	2
10	2
NULL	NULL
# We correctly reject this:
select t1.a, v1.b from t1 left join v1 on t1.a is not null group by v1.a;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t1.a' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
drop view v1;
drop table t1,t2;
create table emp(empno int, ename char(1), deptno int);
create table dept(deptno int primary key, dname char(1));
CREATE algorithm=merge VIEW empdept AS
SELECT emp.empno, emp.ename, dept.deptno, dept.dname
FROM emp LEFT OUTER JOIN dept ON (emp.deptno = dept.deptno);
EXPLAIN SELECT dname, COUNT(*)
FROM empdept
GROUP BY deptno;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	emp	NULL	ALL	NULL	NULL	NULL	NULL	1	100.00	Using temporary; Using filesort
1	SIMPLE	dept	NULL	eq_ref	PRIMARY	PRIMARY	4	test.emp.deptno	1	100.00	NULL
Warnings:
Note	1003	/* select#1 */ select `test`.`dept`.`dname` AS `dname`,count(0) AS `COUNT(*)` from `test`.`emp` left join `test`.`dept` on((`test`.`dept`.`deptno` = `test`.`emp`.`deptno`)) where 1 group by `test`.`dept`.`deptno`
# There is pk-based FD dept.Depno->dept.dname in dept
# and it propagates in the view-which-became-nest because it is
# NULL-friendly.
SELECT dname, COUNT(*)
FROM empdept
GROUP BY deptno;
dname	COUNT(*)
drop view empdept;
CREATE algorithm=temptable VIEW empdept AS
SELECT emp.empno, emp.ename, dept.deptno, dept.dname
FROM emp LEFT OUTER JOIN dept ON (emp.deptno = dept.deptno);
EXPLAIN SELECT dname, COUNT(*)
FROM empdept
GROUP BY deptno;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	PRIMARY	<derived2>	NULL	ALL	NULL	NULL	NULL	NULL	2	100.00	Using temporary; Using filesort
2	DERIVED	emp	NULL	ALL	NULL	NULL	NULL	NULL	1	100.00	NULL
2	DERIVED	dept	NULL	eq_ref	PRIMARY	PRIMARY	4	test.emp.deptno	1	100.00	NULL
Warnings:
Note	1003	/* select#1 */ select `empdept`.`dname` AS `dname`,count(0) AS `COUNT(*)` from `test`.`empdept` group by `empdept`.`deptno`
# There is pk-based FD dept.Depno->dept.dname in dept
# and it propagates in the materialized view because it is
# NULL-friendly, and then in the top query because the view is not in
# the weak side of an outer join.
SELECT dname, COUNT(*)
FROM empdept
GROUP BY deptno;
dname	COUNT(*)
# More tests, for code coverage.
# UNION in derived table
select emp.ename
from
(select 1 as empno union select 2) deriv,
emp
where emp.empno=deriv.empno
group by emp.empno;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.emp.ename' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
drop view empdept;
# Make the key-searching loop meet view columns which don't wrap a
# column (CONCAT).
CREATE VIEW empdept AS
SELECT emp.empno, emp.ename, dept.deptno, concat("",dept.dname) as dname
FROM emp LEFT JOIN dept ON (emp.deptno = dept.deptno);
SELECT ename, COUNT(*) FROM empdept WHERE empno=dname and empno=deptno GROUP BY empno;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'empdept.ename' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
drop table emp,dept;
drop view empdept;
#
# Bug#19636980 ASSERT `TABLE->OUTER_JOIN' FAILED IN GROUP_CHECK::FIND_FD_IN_JOINED_TABLE
#
CREATE TABLE t1 (
c1 INT,
c2 INT,
c4 DATE,
c5 VARCHAR(1)
);
CREATE TABLE t2 (
c1 INT,
c2 INT,
c3 INT,
c5 VARCHAR(1)
);
# alias1.c5 is not FD, the error is detected at SELECT time
CREATE VIEW v1 AS
SELECT alias1.c4 AS field1
FROM t1 AS alias1
INNER JOIN t1 AS alias2
ON 1
GROUP BY field1
ORDER BY alias1.c5;
SELECT * FROM v1;
ERROR 42000: Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'test.alias1.c5' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
DROP VIEW v1;
# alias1.c5 is FD (WHERE contains: alias1.c5='d')
CREATE VIEW v1 AS
SELECT alias1.c4 AS field1, alias1.c4 AS field2
FROM t1 AS alias1
INNER JOIN t1 AS alias2
ON (alias2.c1 = alias1.c2)
WHERE ( NOT EXISTS (
SELECT SQ1_alias1.c5 AS SQ1_field1
FROM t2 AS SQ1_alias1
WHERE SQ1_alias1.c3 < alias1.c1
))
AND (alias1.c5 = alias1.c5
AND alias1.c5 = 'd'
    )
GROUP BY field1, field2
ORDER BY alias1.c5, field1, field2
;
SELECT * FROM v1;
field1	field2
DROP VIEW v1;
DROP TABLE t1,t2;
#
# Bug#19636409 ASSERT `(MAP_OF_NEW_EQ_FDS...` IN GROUP_CHECK::IS_FD_ON_SOURCE ON SELECT
#
CREATE TABLE t1 (
pk int NOT NULL,
c1 datetime,
c2 varchar(1),
c3 date,
c4 date,
c5 varchar(1),
PRIMARY KEY (pk)
);
CREATE VIEW v1 AS
SELECT c3 AS subfield11,
pk AS subfield12,
c2 AS subfield13
FROM t1
GROUP BY subfield11, subfield12
;
# This query is valid. Indeed: field3 i.e. t1.c2 is part of GROUP BY,
# so, in a group:
# - all rows have the same value of t1.c2, noted val_c2,
# - so all rows, which necessarily match WHERE, matched with a row of
# v1 having subfield11=val_c2 and subfield12=val_c2 (due to IN
# predicate),
# - thus both grouping columns of v1's query expression are constant
# (to val_c2)
# - thus v1.subfield13 is constant too (grouping columns determine the
# SELECT list)
# - so, due to IN, this determines the value of t1.pk (t1 is the top
# query's table).
# - so t1.pk is constant, so all columns of t1 are constant.
# Which proves that it makes sense to search FDs in semijoin
# equalities.
# In other words: a semijoin is like a join except that it eliminates
# duplicates, but duplicates are irrelevant to the decision whether a
# column is functionally dependent on a set of columns.
SELECT c5 AS field1,
c4 AS field2,
c2 AS field3,
c1 AS field4
FROM t1
WHERE ( c2, c2, pk ) IN (
SELECT * FROM v1
)
GROUP BY field1, field3, field3;
field1	field2	field3	field4
#
# Bug#19687724 FUNCTIONAL DEPENDENCIES ARE NOT RECOGNIZED IN EQUALITIES BETWEEN ROWS
#
# Inspired by query above, but with a join:
SELECT c5 AS field1,
c4 AS field2,
c2 AS field3,
c1 AS field4
FROM t1, v1
WHERE ( c2, c2, pk ) = (subfield11, subfield12, subfield13)
GROUP BY field1, field3, field3;
field1	field2	field3	field4
# With constants:
SELECT c5 AS field1,
c4 AS field2,
c2 AS field3,
c1 AS field4
FROM t1
WHERE ( c2, c2, pk ) = (1, 2, 3)
GROUP BY field1, field3, field3;
field1	field2	field3	field4
DROP TABLE t1;
CREATE TABLE t1(a INT, b INT, c INT, d INT);
SELECT a,b,c,d FROM t1 WHERE a=c AND b=d GROUP by a,b;
a	b	c	d
SELECT a,b,c,d FROM t1 WHERE (a,b)=(c,d) GROUP BY a,b;
a	b	c	d
SELECT a,b,c,d FROM t1 WHERE (a,b)=(c,d+1) GROUP BY a,b;
ERROR 42000: Expression #4 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t1.d' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
DROP TABLE t1;
DROP VIEW v1;
#
# Bug #20031708 ASSERT ON GROUP_CHECK::IS_FD_ON_SOURCE
#
CREATE TABLE t1 (
col_varchar_10_utf8 VARCHAR(10) CHARACTER SET utf8,
col_int_key INT,
pk INT PRIMARY KEY
);
CREATE TABLE t2 (
col_varchar_10_utf8 VARCHAR(10) CHARACTER SET utf8 DEFAULT NULL,
col_int_key INT DEFAULT NULL,
pk INT PRIMARY KEY
);
CREATE VIEW v2 AS SELECT * FROM t2;
# The reporter's testcase:
SELECT COUNT(*), t1.col_int_key
FROM v2 LEFT OUTER JOIN t1
ON v2.col_varchar_10_utf8 = t1.col_varchar_10_utf8
WHERE v2.pk = 4;
ERROR 42000: In aggregated query without GROUP BY, expression #2 of SELECT list contains nonaggregated column 'test.t1.col_int_key'; this is incompatible with sql_mode=only_full_group_by
DROP VIEW v2;
# A variant: one column is an expression:
CREATE VIEW v2 AS SELECT
CONCAT(col_varchar_10_utf8,' ') AS col_varchar_10_utf8,
col_int_key,
pk
FROM t2;
SELECT COUNT(*), t1.col_int_key
FROM v2 LEFT OUTER JOIN t1
ON v2.col_varchar_10_utf8 = t1.col_varchar_10_utf8
WHERE v2.pk = 4;
ERROR 42000: In aggregated query without GROUP BY, expression #2 of SELECT list contains nonaggregated column 'test.t1.col_int_key'; this is incompatible with sql_mode=only_full_group_by
DROP VIEW v2;
# Query used in the commit comment: view column involving two tables
CREATE VIEW v2 AS
SELECT t1.pk, t2.col_int_key+1 as c, t1.pk+t2.col_int_key as p
FROM t1, t2;
# FDs will be discovered in this order: {}->v2.pk, v2.pk->v2.c,
# v2.c->v2.p
SELECT COUNT(*), v2.p
FROM v2
WHERE v2.c=v2.p and v2.c=v2.pk AND v2.pk = 4;
COUNT(*)	p
0	NULL
DROP VIEW v2;
# If in the query specification defining a view, a base table's pk is
# determined,
# and the view's column is a function of this base table's columns,
# then the view's column is also determined.
# So, in this view's result, {v2.pk}->{v2.coa}:
CREATE ALGORITHM=MERGE VIEW v2 AS
SELECT t2.pk, COALESCE(t2.pk, 3) AS coa
FROM t1 LEFT JOIN t2 ON 0;
# And thus {pk}->{coa} holds in the result of this query using the view;
# if there is NULL-complementing in the LEFT JOIN below then (pk,coa)
# will be (NULL,NULL) and if there is not it will be (non-NULL,3):
# v2.coa is determined by v2.pk. The key fact is that v2.pk is not
# NULLable so this is a NFFD.
SELECT v2.pk, v2.coa
FROM t1 LEFT JOIN v2 AS v2 ON 0
GROUP BY v2.pk;
pk	coa
DROP VIEW v2;
DROP TABLE t1,t2;
#
# Bug#21807579 FUNCTIONAL DEPENDENCIES ARE NOT RECOGNIZED IN GENERATED COLUMNS
#
CREATE TABLE t ( a INT, c INT GENERATED ALWAYS AS (a+2), d INT GENERATED ALWAYS AS (c+2) );
# {a}->{c}, {c}->{d} and {a}->{d} hold.
SELECT c FROM t GROUP BY a;
c
SELECT d FROM t GROUP BY c;
d
SELECT d FROM t GROUP BY a;
d
SELECT 1+c FROM t GROUP BY a;
1+c
SELECT 1+d FROM t GROUP BY c;
1+d
SELECT 1+d FROM t GROUP BY a;
1+d
# {t2.a}->{t2.d}->{t1.c}->{t1.d}
SELECT t1.d FROM t as t1, t as t2 WHERE t2.d=t1.c GROUP BY t2.a;
d
SELECT t1.d FROM t as t1, t as t2 WHERE t2.d>t1.c GROUP BY t2.a;
ERROR 42000: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t1.d' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
DROP TABLE t;
# A non-NULL-friendly dependency.
CREATE TABLE t ( a INT,
c INT GENERATED ALWAYS AS (COALESCE(a,3)) );
INSERT INTO t (a) VALUES(NULL);
CREATE TABLE u ( a INT );
INSERT INTO u VALUES(0),(1);
# Even though {a}->{c} holds in 't', it doesn't propagate to the left
# join's result
SELECT t.a,t.c FROM u LEFT JOIN t ON u.a>0;
a	c
NULL	3
NULL	NULL
SELECT t.a,t.c FROM u LEFT JOIN t ON u.a>0 GROUP BY t.a;
ERROR 42000: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t.c' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
DROP TABLE t,u;
DROP FUNCTION show_json_object;

Man Man