关于外联结的问题

qyzdevil 2013-07-17 05:07:42
我需要两个表做连接,但是在连接的表中要根据条件取出不同的值来,比如说取出字段1是连接表的NO.=1的code
而取出字段2是连接表NO.=2的code。这样的处理我是必须用两次left join 连接表 on 。去实现还是有更有效率的方法?
...全文
213 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qyzdevil 2013-08-08
  • 打赏
  • 举报
回复
引用 6 楼 wwwwb 的回复:
记录多不怕,只要有合适的索引,从你的表结构来看,没有优化方法了
非常感谢。。。 最后改在程序中实现了。取出code在从新写sql取属性值。 原来需要5分钟的现在不到两秒。
wwwwb 2013-07-22
  • 打赏
  • 举报
回复
记录多不怕,只要有合适的索引,从你的表结构来看,没有优化方法了
qyzdevil 2013-07-22
  • 打赏
  • 举报
回复
引用 4 楼 WWWWA 的回复:
建议修改test1结构 ID TYPE 01 1 02 2 03 3 ... SELECT * FROM TEST1 A LEFT JOIN test2 B ON A.ID=B.ID
其实test1表是主键的各种属性,如果拆开的话本来是一条数据结果成了10条数据了。 在不修改表条件的情况下想取出这些名称应该如何写效率更高?比如建立临时表之类的。
WWWWA 2013-07-19
  • 打赏
  • 举报
回复
建议修改test1结构 ID TYPE 01 1 02 2 03 3 ... SELECT * FROM TEST1 A LEFT JOIN test2 B ON A.ID=B.ID
qyzdevil 2013-07-19
  • 打赏
  • 举报
回复
create table test1 ( id1 varchar(10), id2 varchar(10), id3 varchar(10), id4 varchar(10), id5 varchar(10), id6 varchar(10), id7 varchar(10), id8 varchar(10), id9 varchar(10), id10 varchar(10) ) insert into test1 select '01','02','03','04','05','06','07','08','09','10' create table test2 ( code varchar(10), id varchar(10), name varchar(20) ) insert into test2 select '1','01','name1' insert into test2 select '2','02','name2' insert into test2 select '3','03','name3' insert into test2 select '4','04','name4' insert into test2 select '5','05','name5' insert into test2 select '6','06','name1' insert into test2 select '7','07','name7' insert into test2 select '8','08','name8' insert into test2 select '9','09','name9' insert into test2 select '10','10','name10' insert into test2 select '11','11','name1' insert into test2 select '12','12','name2' insert into test2 select '13','13','name3' insert into test2 select '14','14','name4' insert into test2 select '15','15','name5' insert into test2 select '16','16','name1' insert into test2 select '17','17','name7' insert into test2 select '18','18','name8' insert into test2 select '19','19','name9' insert into test2 select '20','20','name10' 现在我想取出test1的id 根test2的name。 连接的关系就是很简单的test1.id1 = test2.id and test2.code = '1' 取出id1的name test1.id2 = test2.id and test2.code = '2' 取出id1的name 我现在的写法是将两个表连接十次分别取出所有name. 仅取第一个名称是 select test1.*,test2.name from test1 left join test2 on (test2.code = '1' and test2.id = test1.id1) 取前两个个名称是 select test1.*,test21.name,test22.name from (test1 left join test2 test21 on (test21.code = '1' and test21.id = test1.id1)) left join test2 test22 on (test22.code = '2' and test22.id = test1.id2)) 取十个依次类推,可以执行,但是如果test1表里的数据很多,那么执行起来的效率非常低。 我现在测试是连接20次取名称,表一里有500条数据的话要执行5分钟左右。 现在想求大神给个解决办法能大幅提高sql文的效率。谢了。 数据库用的是access 2007.
qyzdevil 2013-07-19
  • 打赏
  • 举报
回复
引用 1 楼 ACMAIN_CHM 的回复:
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。 参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382 1. 你的 create table xxx .. 语句 2. 你的 insert into xxx ... 语句 3. 结果是什么样,(并给以简单的算法描述) 4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL) 这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
额,谢谢版主提醒,新人不是很懂规矩,见谅。新帖放在4楼。一会重新编辑一下。
ACMAIN_CHM 2013-07-17
  • 打赏
  • 举报
回复
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。 参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382 1. 你的 create table xxx .. 语句 2. 你的 insert into xxx ... 语句 3. 结果是什么样,(并给以简单的算法描述) 4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL) 这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。

7,713

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧