mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 20:12:31 +01:00
081bcb3b8b
At the end of execution top level join execution we cleanup this join with true argument. It leads to underlying join cleanup(subquery) with true argument too and to tmp_table_param->field array cleanup which is required later. The problem is that Item_func_set_user_var does not set result_filed which leads to unnecessary repeated excution of subquery on final stage. The fix is to set result_field for Item_func_set_user_var. mysql-test/r/count_distinct.result: test result mysql-test/r/user_var.result: test result mysql-test/t/count_distinct.test: test case mysql-test/t/user_var.test: test case sql/item_func.cc: At the end of execution top level join execution we cleanup this join with true argument. It leads to underlying join cleanup(subquery) with true argument too and to tmp_table_param->field array cleanup which is required later. The problem is that Item_func_set_user_var does not set result_filed which leads to unnecessary repeated excution of subquery on final stage. The fix is to set result_field for Item_func_set_user_var.
88 lines
3.9 KiB
Text
88 lines
3.9 KiB
Text
drop table if exists t1,t2,t3;
|
|
create table t1 (libname varchar(21) not null, city text, primary key (libname));
|
|
create table t2 (isbn varchar(21) not null, author text, title text, primary key (isbn));
|
|
create table t3 (isbn varchar(21) not null, libname varchar(21) not null, quantity int ,primary key (isbn,libname));
|
|
insert into t2 values ('001','Daffy','A duck''s life');
|
|
insert into t2 values ('002','Bugs','A rabbit\'s life');
|
|
insert into t2 values ('003','Cowboy','Life on the range');
|
|
insert into t2 values ('000','Anonymous','Wanna buy this book?');
|
|
insert into t2 values ('004','Best Seller','One Heckuva book');
|
|
insert into t2 values ('005','EveryoneBuys','This very book');
|
|
insert into t2 values ('006','San Fran','It is a san fran lifestyle');
|
|
insert into t2 values ('007','BerkAuthor','Cool.Berkley.the.book');
|
|
insert into t3 values('000','New York Public Libra','1');
|
|
insert into t3 values('001','New York Public Libra','2');
|
|
insert into t3 values('002','New York Public Libra','3');
|
|
insert into t3 values('003','New York Public Libra','4');
|
|
insert into t3 values('004','New York Public Libra','5');
|
|
insert into t3 values('005','New York Public Libra','6');
|
|
insert into t3 values('006','San Fransisco Public','5');
|
|
insert into t3 values('007','Berkeley Public1','3');
|
|
insert into t3 values('007','Berkeley Public2','3');
|
|
insert into t3 values('001','NYC Lib','8');
|
|
insert into t1 values ('New York Public Libra','New York');
|
|
insert into t1 values ('San Fransisco Public','San Fran');
|
|
insert into t1 values ('Berkeley Public1','Berkeley');
|
|
insert into t1 values ('Berkeley Public2','Berkeley');
|
|
insert into t1 values ('NYC Lib','New York');
|
|
select t2.isbn,city,t1.libname,count(t1.libname) as a from t3 left join t1 on t3.libname=t1.libname left join t2 on t3.isbn=t2.isbn group by city,t1.libname;
|
|
isbn city libname a
|
|
007 Berkeley Berkeley Public1 1
|
|
007 Berkeley Berkeley Public2 1
|
|
000 New York New York Public Libra 6
|
|
001 New York NYC Lib 1
|
|
006 San Fran San Fransisco Public 1
|
|
select t2.isbn,city,t1.libname,count(distinct t1.libname) as a from t3 left join t1 on t3.libname=t1.libname left join t2 on t3.isbn=t2.isbn group by city having count(distinct t1.libname) > 1;
|
|
isbn city libname a
|
|
007 Berkeley Berkeley Public1 2
|
|
000 New York New York Public Libra 2
|
|
select t2.isbn,city,t1.libname,count(distinct t1.libname) as a from t3 left join t1 on t3.libname=t1.libname left join t2 on t3.isbn=t2.isbn group by city having count(distinct concat(t1.libname,'a')) > 1;
|
|
isbn city libname a
|
|
007 Berkeley Berkeley Public1 2
|
|
000 New York New York Public Libra 2
|
|
select t2.isbn,city,@bar:=t1.libname,count(distinct t1.libname) as a
|
|
from t3 left join t1 on t3.libname=t1.libname left join t2
|
|
on t3.isbn=t2.isbn group by city having count(distinct
|
|
t1.libname) > 1;
|
|
isbn city @bar:=t1.libname a
|
|
007 Berkeley Berkeley Public1 2
|
|
000 New York New York Public Libra 2
|
|
SELECT @bar;
|
|
@bar
|
|
Berkeley Public2
|
|
select t2.isbn,city,concat(@bar:=t1.libname),count(distinct t1.libname) as a
|
|
from t3 left join t1 on t3.libname=t1.libname left join t2
|
|
on t3.isbn=t2.isbn group by city having count(distinct
|
|
t1.libname) > 1;
|
|
isbn city concat(@bar:=t1.libname) a
|
|
007 Berkeley Berkeley Public1 2
|
|
000 New York New York Public Libra 2
|
|
SELECT @bar;
|
|
@bar
|
|
Berkeley Public2
|
|
drop table t1, t2, t3;
|
|
create table t1 (f1 int);
|
|
insert into t1 values (1);
|
|
create table t2 (f1 int,f2 int);
|
|
select t1.f1,count(distinct t2.f2),count(distinct 1,NULL) from t1 left join t2 on t1.f1=t2.f1 group by t1.f1;
|
|
f1 count(distinct t2.f2) count(distinct 1,NULL)
|
|
1 0 0
|
|
drop table t1,t2;
|
|
create table t1 (f int);
|
|
select count(distinct f) from t1;
|
|
count(distinct f)
|
|
0
|
|
drop table t1;
|
|
create table t1 (a char(3), b char(20), primary key (a, b));
|
|
insert into t1 values ('ABW', 'Dutch'), ('ABW', 'English');
|
|
select count(distinct a) from t1 group by b;
|
|
count(distinct a)
|
|
1
|
|
1
|
|
drop table t1;
|
|
create table t1 (f1 int, f2 int);
|
|
insert into t1 values (0,1),(1,2);
|
|
select count(distinct if(f1,3,f2)) from t1;
|
|
count(distinct if(f1,3,f2))
|
|
2
|
|
drop table t1;
|