mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Merge mysql.com:/home/wax/mysql/mysql-4.1
into mysql.com:/home/wax/mysql/mysql-4.1group_concat
This commit is contained in:
@ -321,3 +321,33 @@ HAVING LEFT(names, 1) ='J';
|
|||||||
names
|
names
|
||||||
John###Anna###Bill
|
John###Anna###Bill
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 ( a int, b TEXT );
|
||||||
|
INSERT INTO t1 VALUES (1,'First Row'), (2,'Second Row');
|
||||||
|
SELECT GROUP_CONCAT(b ORDER BY b) FROM t1 GROUP BY a;
|
||||||
|
GROUP_CONCAT(b ORDER BY b)
|
||||||
|
First Row
|
||||||
|
Second Row
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a_id tinyint(4) NOT NULL default '0', PRIMARY KEY (a_id)) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||||
|
INSERT INTO t1 VALUES (1),(2),(3);
|
||||||
|
CREATE TABLE t2 (b_id tinyint(4) NOT NULL default '0',b_a tinyint(4) NOT NULL default '0', PRIMARY KEY (b_id), KEY (b_a),
|
||||||
|
CONSTRAINT fk_b_a FOREIGN KEY (b_a) REFERENCES t1 (a_id) ON DELETE CASCADE ON UPDATE NO ACTION) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||||
|
INSERT INTO t2 VALUES (1,1),(2,1),(3,1),(4,2),(5,2);
|
||||||
|
SELECT * FROM (SELECT t1.*,GROUP_CONCAT(t2.b_id SEPARATOR ',') as b_list FROM (t1 LEFT JOIN (t2) on t1.a_id = t2.b_a) GROUP BY t1.a_id ) AS xyz;
|
||||||
|
a_id b_list
|
||||||
|
1 1,2,3
|
||||||
|
2 4,5
|
||||||
|
3 NULL
|
||||||
|
DROP TABLE t2;
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (A_ID INT NOT NULL,A_DESC CHAR(3) NOT NULL,PRIMARY KEY (A_ID));
|
||||||
|
INSERT INTO t1 VALUES (1,'ABC'), (2,'EFG'), (3,'HIJ');
|
||||||
|
CREATE TABLE t2 (A_ID INT NOT NULL,B_DESC CHAR(3) NOT NULL,PRIMARY KEY (A_ID,B_DESC));
|
||||||
|
INSERT INTO t2 VALUES (1,'A'),(1,'B'),(3,'F');
|
||||||
|
SELECT t1.A_ID, GROUP_CONCAT(t2.B_DESC) AS B_DESC FROM t1 LEFT JOIN t2 ON t1.A_ID=t2.A_ID GROUP BY t1.A_ID ORDER BY t1.A_DESC;
|
||||||
|
A_ID B_DESC
|
||||||
|
1 A,B
|
||||||
|
2 NULL
|
||||||
|
3 F
|
||||||
|
DROP TABLE t1;
|
||||||
|
DROP TABLE t2;
|
||||||
|
@ -201,3 +201,38 @@ SELECT GROUP_CONCAT(a SEPARATOR '||') AS names FROM t1
|
|||||||
SELECT GROUP_CONCAT(a SEPARATOR '###') AS names FROM t1
|
SELECT GROUP_CONCAT(a SEPARATOR '###') AS names FROM t1
|
||||||
HAVING LEFT(names, 1) ='J';
|
HAVING LEFT(names, 1) ='J';
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# check blobs
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 ( a int, b TEXT );
|
||||||
|
INSERT INTO t1 VALUES (1,'First Row'), (2,'Second Row');
|
||||||
|
SELECT GROUP_CONCAT(b ORDER BY b) FROM t1 GROUP BY a;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# check null values #1
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a_id tinyint(4) NOT NULL default '0', PRIMARY KEY (a_id)) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||||
|
INSERT INTO t1 VALUES (1),(2),(3);
|
||||||
|
CREATE TABLE t2 (b_id tinyint(4) NOT NULL default '0',b_a tinyint(4) NOT NULL default '0', PRIMARY KEY (b_id), KEY (b_a),
|
||||||
|
CONSTRAINT fk_b_a FOREIGN KEY (b_a) REFERENCES t1 (a_id) ON DELETE CASCADE ON UPDATE NO ACTION) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||||
|
INSERT INTO t2 VALUES (1,1),(2,1),(3,1),(4,2),(5,2);
|
||||||
|
SELECT * FROM (SELECT t1.*,GROUP_CONCAT(t2.b_id SEPARATOR ',') as b_list FROM (t1 LEFT JOIN (t2) on t1.a_id = t2.b_a) GROUP BY t1.a_id ) AS xyz;
|
||||||
|
DROP TABLE t2;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# check null values #2
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (A_ID INT NOT NULL,A_DESC CHAR(3) NOT NULL,PRIMARY KEY (A_ID));
|
||||||
|
INSERT INTO t1 VALUES (1,'ABC'), (2,'EFG'), (3,'HIJ');
|
||||||
|
CREATE TABLE t2 (A_ID INT NOT NULL,B_DESC CHAR(3) NOT NULL,PRIMARY KEY (A_ID,B_DESC));
|
||||||
|
INSERT INTO t2 VALUES (1,'A'),(1,'B'),(3,'F');
|
||||||
|
SELECT t1.A_ID, GROUP_CONCAT(t2.B_DESC) AS B_DESC FROM t1 LEFT JOIN t2 ON t1.A_ID=t2.A_ID GROUP BY t1.A_ID ORDER BY t1.A_DESC;
|
||||||
|
DROP TABLE t1;
|
||||||
|
DROP TABLE t2;
|
||||||
|
|
||||||
|
@ -1966,12 +1966,12 @@ Item_func_group_concat::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
|
|||||||
Fix fields for select list and ORDER clause
|
Fix fields for select list and ORDER clause
|
||||||
*/
|
*/
|
||||||
|
|
||||||
for (i= 0 ; i < arg_count ; i++)
|
for (i=0 ; i < arg_count ; i++)
|
||||||
{
|
{
|
||||||
if (args[i]->fix_fields(thd, tables, args + i) || args[i]->check_cols(1))
|
if (args[i]->fix_fields(thd, tables, args + i) || args[i]->check_cols(1))
|
||||||
return 1;
|
return 1;
|
||||||
if (i < arg_count_field && args[i]->maybe_null)
|
if (i < arg_count_field)
|
||||||
maybe_null= 0;
|
maybe_null |= args[i]->maybe_null;
|
||||||
}
|
}
|
||||||
|
|
||||||
result_field= 0;
|
result_field= 0;
|
||||||
@ -2043,10 +2043,13 @@ bool Item_func_group_concat::setup(THD *thd)
|
|||||||
|
|
||||||
Note that in the table, we first have the ORDER BY fields, then the
|
Note that in the table, we first have the ORDER BY fields, then the
|
||||||
field list.
|
field list.
|
||||||
|
|
||||||
|
We need to set set_sum_field in true for storing value of blob in buffer
|
||||||
|
of a record instead of a pointer of one.
|
||||||
*/
|
*/
|
||||||
if (!(table=create_tmp_table(thd, tmp_table_param, all_fields, 0,
|
if (!(table=create_tmp_table(thd, tmp_table_param, all_fields,
|
||||||
0, 0, 0,select_lex->options | thd->options,
|
(ORDER*) 0, 0, TRUE,select_lex->options | thd->options,
|
||||||
(char *) "")))
|
HA_POS_ERROR,(char *) "")))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
table->file->extra(HA_EXTRA_NO_ROWS);
|
table->file->extra(HA_EXTRA_NO_ROWS);
|
||||||
table->no_rows= 1;
|
table->no_rows= 1;
|
||||||
|
Reference in New Issue
Block a user