解决方案 »
- 9万条数据,用select*全部查询mysql数据库,数度超级慢,求解。
- 进来看看!
- !!关于 mysql 游标的问题 请教。
- SELECT @@IDENTITY与SELECT LAST_INSERT_ID()的区别是什么?
- 如何用MYSQL提取当日的信息 显示在表单中
- 初用Mysql,大家帮我看看这个存储过程有语法错误么?
- MySQL问题,在不破坏记录的前提下,如何从新排ID的顺序呢?
- mysql报错了,咋么回事?
- mysql 查询排序问题
- DBMonitor该怎么监控数据库
- mysql-connector-java-5.5.27-bin.jar下载,求链接
- mysql (noinstall) 服务器动问题
SELECT * FROM test2
UNION
SELECT * FROM test1) a
LEFT JOIN test1 b ON a.id=b.id AND a.name2=b.name1
LEFT JOIN test2 b1 ON a.id=b1.id AND a.name2=b1.name2
两个表之间关联的只有ID,但是同一ID条目数不一样
NAME之间到底有没有关系?
另外2楼给的代码中单独查询
SELECT * FROM test2
UNION
SELECT * FROM test1
为什么查询结果是
id name2
01 A1
01 A2
01 A3
02 B1
02 b2
两个表的name1与name2是不相同的,union应该不会去重啊,我理解的结果应该是
id name2
01 a1
01 a2
01 A1
01 A2
01 A3
02 b1
02 b2
所以我的实际需求中,应用2楼的代码,还是存在问题。
UNION ALL才不会去重,自己查查资料
百度了一下 mysql字段的值默认不区分大小写。。
我把需求重新改一下吧,test2 表的 name值改成C、 Dcreate table test1
(
id varchar(10),
name1 varchar(20)
);
insert into test1 select '01','A1';
insert into test1 select '01','A2';
insert into test1 select '02','B1';
insert into test1 select '02','B2'; create table test2
(
id varchar(10),
name2 varchar(20)
);
insert into test2 select '01','C1';
insert into test2 select '01','C2';
insert into test2 select '01','C3';
insert into test2 select '02','D1'; /* 表1 test1
id name1
01 A1
01 A2
02 B1
02 B2
表2 test2
id name2
01 C1
01 C2
01 C3
02 D1
两个表之间关联的只有ID,但是同一ID条目数不一样
要得到这样的报表
id name1 name2
01 A1 C1
01 A2 C2
01 null C3
02 B1 D1
02 B2 null
*/ drop table test1;
drop table test2; 麻烦2楼再帮我改改吧,用之前的代码查询结果不正确了。
+------+-------+
| id | name1 |
+------+-------+
| 01 | A1 |
| 01 | A2 |
| 02 | B1 |
| 02 | B2 |
+------+-------+
4 rows in set (0.00 sec)mysql> select * from test2;
+------+-------+
| id | name2 |
+------+-------+
| 01 | C1 |
| 01 | C2 |
| 01 | C3 |
| 02 | D1 |
+------+-------+
4 rows in set (0.00 sec)mysql>
mysql> set @r1=0;
Query OK, 0 rows affected (0.00 sec)mysql> set @id1=0;
Query OK, 0 rows affected (0.00 sec)mysql>
mysql> set @r2=0;
Query OK, 0 rows affected (0.00 sec)mysql> set @id2=0;
Query OK, 0 rows affected (0.00 sec)mysql>
mysql> select id,max(name1) ,max(name2)
-> from (
-> (select @r1:=if(@id1!=id,1,@r1+1) as rownum,@id1:=id,id,name1,null as name2 from test1 order by id,name1 )
-> union all
-> (select @r2:=if(@id2!=id,1,@r2+1) as rownum,@id2:=id,id,null,name2 from test2 order by id,name2 )
-> ) t
-> group by id,rownum;
+------+------------+------------+
| id | max(name1) | max(name2) |
+------+------------+------------+
| 01 | A1 | C1 |
| 01 | A2 | C2 |
| 01 | NULL | C3 |
| 02 | B1 | D1 |
| 02 | B2 | NULL |
+------+------------+------------+
5 rows in set (0.00 sec)mysql>