distinct.test
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:6k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. #
  2. # Bug with distinct and INSERT INTO
  3. # Bug with group by and not used fields
  4. #
  5. drop table if exists t1,t2,t3;
  6. CREATE TABLE t1 (id int,facility char(20));
  7. CREATE TABLE t2 (facility char(20));
  8. INSERT INTO t1 VALUES (NULL,NULL);
  9. INSERT INTO t1 VALUES (-1,'');
  10. INSERT INTO t1 VALUES (0,'');
  11. INSERT INTO t1 VALUES (1,'/L');
  12. INSERT INTO t1 VALUES (2,'A01');
  13. INSERT INTO t1 VALUES (3,'ANC');
  14. INSERT INTO t1 VALUES (4,'F01');
  15. INSERT INTO t1 VALUES (5,'FBX');
  16. INSERT INTO t1 VALUES (6,'MT');
  17. INSERT INTO t1 VALUES (7,'P');
  18. INSERT INTO t1 VALUES (8,'RV');
  19. INSERT INTO t1 VALUES (9,'SRV');
  20. INSERT INTO t1 VALUES (10,'VMT');
  21. INSERT INTO t2 SELECT DISTINCT FACILITY FROM t1;
  22. select id from t1 group by id;
  23. select * from t1 order by id;
  24. select id-5,facility from t1 order by "id-5";
  25. select id,concat(facility) from t1 group by id ;
  26. select id+0 as a,max(id),concat(facility) as b from t1 group by a order by b desc,a;
  27. select id >= 0 and id <= 5 as grp,count(*) from t1 group by grp;
  28. SELECT DISTINCT FACILITY FROM t1;
  29. SELECT FACILITY FROM t2;
  30. SELECT count(*) from t1,t2 where t1.facility=t2.facility;
  31. select count(facility) from t1;
  32. select count(*) from t1;
  33. select count(*) from t1 where facility IS NULL;
  34. select count(*) from t1 where facility = NULL;
  35. select count(*) from t1 where facility IS NOT NULL;
  36. select count(*) from t1 where id IS NULL;
  37. select count(*) from t1 where id IS NOT NULL;
  38. drop table t1,t2;
  39. #
  40. # Problem with distinct without results
  41. #
  42. CREATE TABLE t1 (UserId int(11) DEFAULT '0' NOT NULL);
  43. INSERT INTO t1 VALUES (20);
  44. INSERT INTO t1 VALUES (27);
  45. SELECT UserId FROM t1 WHERE Userid=22;
  46. SELECT UserId FROM t1 WHERE UserId=22 group by Userid;
  47. SELECT DISTINCT UserId FROM t1 WHERE UserId=22 group by Userid;
  48. SELECT DISTINCT UserId FROM t1 WHERE UserId=22;
  49. drop table t1;
  50. #
  51. # Test of distinct
  52. #
  53. CREATE TABLE t1 (a int(10) unsigned not null primary key,b int(10) unsigned);
  54. INSERT INTO t1 VALUES (1,1),(2,1);
  55. CREATE TABLE t2 (a int(10) unsigned not null, key (A));
  56. INSERT INTO t2 VALUES (1),(2);
  57. CREATE TABLE t3 (a int(10) unsigned, key(A), b text);
  58. INSERT INTO t3 VALUES (1,'1'),(2,'2');
  59. SELECT DISTINCT t3.b FROM t3,t2,t1 WHERE t3.a=t1.b AND t1.a=t2.a;
  60. INSERT INTO t2 values (1),(2),(3);
  61. INSERT INTO t3 VALUES (1,'1'),(2,'2'),(1,'1'),(2,'2');
  62. explain SELECT distinct t3.a FROM t3,t2,t1 WHERE t3.a=t1.b AND t1.a=t2.a;
  63. SELECT distinct t3.a FROM t3,t2,t1 WHERE t3.a=t1.b AND t1.a=t2.a;
  64. # Create a lot of data into t3;
  65. create temporary table t4 select * from t3;
  66. insert into t3 select * from t4;
  67. insert into t4 select * from t3;
  68. insert into t3 select * from t4;
  69. insert into t4 select * from t3;
  70. insert into t3 select * from t4;
  71. insert into t4 select * from t3;
  72. insert into t3 select * from t4;
  73. explain select distinct t1.a from t1,t3 where t1.a=t3.a;
  74. #flush status;
  75. select distinct t1.a from t1,t3 where t1.a=t3.a;
  76. #show status like 'Handler%';
  77. #flush status;
  78. select distinct 1 from t1,t3 where t1.a=t3.a;
  79. #show status like 'Handler%';
  80. drop table t1,t2,t3,t4;
  81. CREATE TABLE t1 (name varchar(255));
  82. INSERT INTO t1 VALUES ('aa'),('ab'),('ac'),('ad'),('ae');
  83. SELECT DISTINCT * FROM t1 LIMIT 2;
  84. SELECT DISTINCT name FROM t1 LIMIT 2;
  85. SELECT DISTINCT 1 FROM t1 LIMIT 2;
  86. drop table t1;
  87. CREATE TABLE t1 (
  88.   ID int(11) NOT NULL auto_increment,
  89.   NAME varchar(75) DEFAULT '' NOT NULL,
  90.   LINK_ID int(11) DEFAULT '0' NOT NULL,
  91.   PRIMARY KEY (ID),
  92.   KEY NAME (NAME),
  93.   KEY LINK_ID (LINK_ID)
  94. );
  95. INSERT INTO t1 (ID, NAME, LINK_ID) VALUES (1,'Mike',0),(2,'Jack',0),(3,'Bill',0);
  96. CREATE TABLE t2 (
  97.   ID int(11) NOT NULL auto_increment,
  98.   NAME varchar(150) DEFAULT '' NOT NULL,
  99.   PRIMARY KEY (ID),
  100.   KEY NAME (NAME)
  101. );
  102. SELECT DISTINCT
  103.     t2.id AS key_link_id,
  104.     t2.name AS link
  105. FROM t1
  106. LEFT JOIN t2 ON t1.link_id=t2.id
  107. GROUP BY t1.id
  108. ORDER BY link;
  109. drop table t1,t2;
  110. #
  111. # Problem with table dependencies
  112. #
  113. create table t1 (
  114.     id int not null,
  115.     name tinytext not null,
  116.     unique (id)
  117. );
  118. create table t2 (
  119.     id int not null,
  120.     idx int not null,
  121.     unique (id, idx)
  122. );
  123. create table t3 (
  124.     id int not null,
  125.     idx int not null,
  126.     unique (id, idx)
  127. );
  128. insert into t1 values (1,'yes'), (2,'no');
  129. insert into t2 values (1,1);
  130. insert into t3 values (1,1);
  131. EXPLAIN
  132. SELECT DISTINCT
  133.     t1.id
  134. from
  135.     t1
  136.     straight_join
  137.     t2
  138.     straight_join
  139.     t3
  140.     straight_join
  141.     t1 as j_lj_t2 left join t2 as t2_lj
  142.         on j_lj_t2.id=t2_lj.id
  143.     straight_join
  144.     t1 as j_lj_t3 left join t3 as t3_lj
  145.         on j_lj_t3.id=t3_lj.id
  146. WHERE
  147.     ((t1.id=j_lj_t2.id AND t2_lj.id IS NULL) OR (t1.id=t2.id AND t2.idx=2))
  148.     AND ((t1.id=j_lj_t3.id AND t3_lj.id IS NULL) OR (t1.id=t3.id AND t3.idx=2));
  149. SELECT DISTINCT
  150.     t1.id
  151. from
  152.     t1
  153.     straight_join
  154.     t2
  155.     straight_join
  156.     t3
  157.     straight_join
  158.     t1 as j_lj_t2 left join t2 as t2_lj
  159.         on j_lj_t2.id=t2_lj.id
  160.     straight_join
  161.     t1 as j_lj_t3 left join t3 as t3_lj
  162.         on j_lj_t3.id=t3_lj.id
  163. WHERE
  164.     ((t1.id=j_lj_t2.id AND t2_lj.id IS NULL) OR (t1.id=t2.id AND t2.idx=2))
  165.     AND ((t1.id=j_lj_t3.id AND t3_lj.id IS NULL) OR (t1.id=t3.id AND t3.idx=2));
  166. drop table t1,t2,t3;
  167. #
  168. # Test using DISTINCT on a function that contains a group function
  169. # This also test the case when one doesn't use all fields in GROUP BY.
  170. #
  171. drop table if exists t1;
  172. create table t1 (a int not null, b int not null, t time);
  173. insert into t1 values (1,1,"00:06:15"),(1,2,"00:06:15"),(1,2,"00:30:15"),(1,3,"00:06:15"),(1,3,"00:30:15");
  174. select a,sec_to_time(sum(time_to_sec(t))) from t1 group by a,b;
  175. select distinct a,sec_to_time(sum(time_to_sec(t))) from t1 group by a,b;
  176. create table t2 (a int not null primary key, b int);
  177. insert into t2 values (1,1),(2,2),(3,3);
  178. select t1.a,sec_to_time(sum(time_to_sec(t))) from t1 left join t2 on (t1.b=t2.a) group by t1.a,t2.b;
  179. select distinct t1.a,sec_to_time(sum(time_to_sec(t))) from t1 left join t2 on (t1.b=t2.a) group by t1.a,t2.b;
  180. drop table t1,t2;