1 select t.res_man_id,t.apply_man_id,t.ctrl_man_id,t......... from warehouse t ,t_userIdName u
select (select u.name from t_userIdName u where u.id=t.res_man_id ) as res_man_name,
..............
(select u.name from t_userIdName u where u.id=t.repair_man_id ) as repair_man_name ,
大家看字段就明白了,XX_man_id,都来自于t_userId 如何最有效率的从 warehouse 表的记录里,将_id 转换成 name ?我总不能用N个字查询吧?
2 select t1.XX, ....,t1.YY, t2.XX, ....,t2.YY,t3.XX, ....,t3.YY.......... from 表1,表2,表3,表4....
where t1.xxx=t2.yyy and t3.xxx = t4.yyy .......
从 t1.xx 到tn.yy 就是我们想要的结果字段。 但是这个些结果字段来自于不同的表,同时这些表之间存在某种关系连接在一起。 对于这种情况。 要如何优化这些查询。3 from 表1,表2,表3,表4,...... 这种写法是不是效率不好, 用 from t1 left join t2 on t1.mainId=t2.mainid .....
是不是用连接查询要比那种的好?
谢谢大家!
select (select u.name from t_userIdName u where u.id=t.res_man_id ) as res_man_name,
..............
(select u.name from t_userIdName u where u.id=t.repair_man_id ) as repair_man_name ,
大家看字段就明白了,XX_man_id,都来自于t_userId 如何最有效率的从 warehouse 表的记录里,将_id 转换成 name ?我总不能用N个字查询吧?
2 select t1.XX, ....,t1.YY, t2.XX, ....,t2.YY,t3.XX, ....,t3.YY.......... from 表1,表2,表3,表4....
where t1.xxx=t2.yyy and t3.xxx = t4.yyy .......
从 t1.xx 到tn.yy 就是我们想要的结果字段。 但是这个些结果字段来自于不同的表,同时这些表之间存在某种关系连接在一起。 对于这种情况。 要如何优化这些查询。3 from 表1,表2,表3,表4,...... 这种写法是不是效率不好, 用 from t1 left join t2 on t1.mainId=t2.mainid .....
是不是用连接查询要比那种的好?
谢谢大家!
2.只能说加索引能加快速度。不管是from,还是left join,都是笛卡儿然后能过滤最多数据的条件放where最后,数据量最小的表放from最后个人意见,仅供参考
大家知道 select t.f1, count(t.f9) from t 这样的语句是不行的,f2是单行数据,f1可能是多少数据。
但是我又需要f1字段。
select t.f1,count(t.f9) from t group by t.f1;
如果我同时需要保留很多字段呢?select t.f1,t.f2,t.f3.t.f4.t.f5..... count(t.f9) from t group by t.f1,t.f2,t.f3,t.f4.....
这样group by 这么多字段,效率肯定有问题。有没有什么好办法啊?
是啊!哪会有N个查询啊! 能过滤最多数据的条件放where最后,数据量最小的表放from最后 这两点都是RBO法则吧!现在11g是基于CBO哦!