日期:2014-05-17  浏览次数:20943 次

如果这样,怎么样写sql效率高?(马上给分)
比如有很多个表,都是时间   某数据,想把它们连接成一张表,什么样写效率高呢?

比如:

A表是

时间                 成本
2007-01           70000
2007-02           47000
2007-03           600000


B表是

时间                 收入
2007-01           470000
2007-02           17000
2007-03           880000


C表是

时间                 纳税额
2007-01           4000
2007-02           1000
2007-03           26600


D表

E表

F表   ……   (有二十张表)

想显示成:


时间                 成本                       收入                   纳税额         DD       EE       FF       GG       HH
2007-01           70000                     470000               4000             0         ..
2007-02           47000                     17000                 1000             99
2007-03           600000                   880000               26600           60


应该怎么写呢?




------解决方案--------------------
看来是的!
看强人出现!
------解决方案--------------------
1 查询,每个表都和A表关联要left out join
2
建立一个临时表,临时表 temp_table字段为 time,a,b,c,d,e 等需要查询的字段
循环 A表
插入数据到临时表 temp_table
然后查询b表中,是不是有时间为A表中时间的字段,如果有update temp_table set b = (select b.收入 from b where b.time = a.time)
然后c表,d表...
最后查询临时表temp_table


------解决方案--------------------
一楼的写法不对,会丢数据.
首先要找出一个驱动表,即时间最全的表,以该表为依据去右外连其它表,这样可以保证所有数据不丢失,并且可使用时间字段索引.
如果表A中的时间最全,则
select a.时间,a.成本,b.收入,c...... from
a,b,c,d,e,f....
where a.时间=b.时间(+)
and a.时间=c.时间(+)
and a.时间=d.时间(+)
....