2012-12-19 25 views
1

连接表时,我有,我想加入没有与.NET

SELECT b.nickname,count(a.doctor_id) 
FROM a_table a 
join b_table b 
on (a.doctor_id=b.id_user) 
GROUP BY a.doctor_id 

SELECT doctor_id, SUM(medicine) medicine, SUM(radiology) radiology,sum(lab) lab, sum(act) act 
FROM  (
    SELECT MAX(doctor_id) doctor_id, 
      SUM(IF(pm='F', cost, NULL)) medicine, 
      SUM(IF(pm='R', cost, NULL)) radiology, 
      SUM(IF(pm='L', cost, NULL)) lab, 
      SUM(IF(pm='P', cost, NULL)) act 
    FROM  c_table 
    GROUP BY Trans_No 
) t 
GROUP BY doctor_id 

我已经尝试过加入

SELECT b.nickname, count(a.doctor_id), SUM(medicine) medicine, SUM(radiology) radiology,sum(lab) lab, sum(act) act 
FROM  (
    SELECT MAX(doctor_id) doctor_id, 
      SUM(IF(pm='F', cost, NULL)) medicine, 
      SUM(IF(pm='R', cost, NULL)) radiology, 
      SUM(IF(pm='L', cost, NULL)) lab, 
      SUM(IF(pm='P', cost, NULL)) act 
    FROM  c_table 
    GROUP BY Trans_No 
) t 
join a_table a on (a.doctor_id=t.doctor_id) 
join b_table b on (a.doctor_id=b.id_user) 
GROUP BY a.doctor_id 

所有的这两个查询响应表有大量的数据(超过200万的数据),我已经设置了我的CommandTimeout = 600,但它仍然没有回应

我加入了它错误还是只是为了许多数据?我该怎么做才能得到结果?

+0

直接在数据库而不是代码上运行查询需要多长时间?它返回什么? – David

+1

您是否看过预计的执行计划以查看可能发生的情况?这些表格是否适当地编制索引?索引统计数据是最新的吗? – HABO

回答

0

这不是一个答案,但它太长的评论。

您的查询没有意义。我认为你需要再看看这个问题。第一个查询:

SELECT b.nickname,count(a.doctor_id) 
FROM a_table a 
join b_table b 
on (a.doctor_id=b.id_user) 
GROUP BY a.doctor_id 

总是将返回1 count(a.doctor_id),除非doctor_id为NULL。这是因为你在该列上分组。你的意思是为每个医生的每个昵称或绰号的数量计算医生的数量吗?

在第二个查询中的子查询也没有多大意义:

SELECT MAX(doctor_id) doctor_id, 
     SUM(IF(pm='F', cost, NULL)) medicine, 
     SUM(IF(pm='R', cost, NULL)) radiology, 
     SUM(IF(pm='L', cost, NULL)) lab, 
     SUM(IF(pm='P', cost, NULL)) act 
FROM  c_table 
GROUP BY Trans_No 

你为什么要分组的trans_no?你为什么不使用它作为索引?

也许你应该写另一个问题,解释你正在努力完成的事情。