oracle 透过明细表查询主表(返回主表记录)
oracle 通过明细表查询主表(返回主表记录)
主表: 班级ID 班级名称
1 班级1
2 班级2
细表: 学生ID 班级ID 学生姓名
1 1 张三
2 1 李四
3 2 王五
通过张三 或李四就能查到班级1 只返回一条记录(即只返回主表的一条记录)别用in语句 ,exists比in高效,但不好组合,有没有其他高效的语句!
------解决方案--------------------
不知道。。。。。。。。。。。。。。。。
------解决方案--------------------
in和exists的查询计划是一样的。
自己看看执行计划就知道了,网上说的很多优化语句都是扯淡。或者应该是版本极低的数据库遗留的经验。
微软的算法水平还不至于低到需要开发人员决定大表连小表用in,小表连大表用exists。
------解决方案--------------------
SELECT 班级ID,班级名称 FROM A WHERE EXIST (SELECT * FROM B WHERE A.班级ID =B.班级ID and b.学生姓名='张三' )
试试
http://blog.csdn.net/zhiweianran/article/details/7868894参考
------解决方案--------------------
ldn 恩,NB。。。。。。。。。。。。。。。。。。
主表: 班级ID 班级名称
1 班级1
2 班级2
细表: 学生ID 班级ID 学生姓名
1 1 张三
2 1 李四
3 2 王五
通过张三 或李四就能查到班级1 只返回一条记录(即只返回主表的一条记录)别用in语句 ,exists比in高效,但不好组合,有没有其他高效的语句!
------解决方案--------------------
不知道。。。。。。。。。。。。。。。。
------解决方案--------------------
in和exists的查询计划是一样的。
自己看看执行计划就知道了,网上说的很多优化语句都是扯淡。或者应该是版本极低的数据库遗留的经验。
微软的算法水平还不至于低到需要开发人员决定大表连小表用in,小表连大表用exists。
------解决方案--------------------
SELECT 班级ID,班级名称 FROM A WHERE EXIST (SELECT * FROM B WHERE A.班级ID =B.班级ID and b.学生姓名='张三' )
试试
http://blog.csdn.net/zhiweianran/article/details/7868894参考
------解决方案--------------------
ldn 恩,NB。。。。。。。。。。。。。。。。。。