Mysql - 相同的查询不同的结果

时间:2016-07-26 14:43:13

标签: mysql crystal-reports odbc innodb

我在Crystal中创建一个报告,报告一直是错误的,我们将其追溯到从服务器返回的结果。 环境是MySQL 5.6.19 + MySQL ODBC 5.3.6。 表是InnoDB。

Crystal正在生成的查询是:

SELECT `Encounter`.`Id`, `Transact`.`Client_No`, `Transact`.`Amount`,
       `Transact`.`Process_Date`, `Codelist`.`Type`, `Encounter`.`Co_Res`, 
       `Codelist`.`ProcType`, `Transact`.`Id`, `Client`.`Name`, 
       `Transact`.`Patient_No`, `Transact`.`Encounter_No`, `Transact`.`Quantity`,
       `Encounter`.`Date_Of_Service`, `Encounter`.`Status`, 
       `Insuranceschedule`.`Ins1Order`, `Insuranceschedule`.`Ins2Order`, 
       `Insuranceschedule`.`Ins3Order`, `Insuranceschedule`.`Ins4Order`, 
       `Insuranceschedule`.`Ins5Order`, `Insuranceschedule`.`Ins6Order`,  
       `Ins1`.`Plan_Type`, `Ins2`.`Plan_Type`, `Ins5`.`Plan_Type`, 
       `Encounter`.`No`, `Ins3`.`Plan_Type`, `Ins4`.`Plan_Type`, 
       `Ins6`.`Plan_Type`  
 FROM   {oj (((((((((`Production`.`transact` `Transact` 
   INNER JOIN `Production`.`client` `Client` 
   ON `Transact`.`Client_No`=`Client`.`Client_No`) 
   INNER JOIN `Production`.`codelist` `Codelist` 
   ON `Transact`.`Code`=`Codelist`.`Code`) 
   INNER JOIN `Production`.`Encounter` `Encounter` 
   ON (`Transact`.`Patient_No`=`Encounter`.`Patient_No`) 
     AND (`Transact`.`Encounter_No`=`Encounter`.`No`)) 
   LEFT OUTER JOIN `Production`.`insuranceschedule` `Insuranceschedule` 
   ON `Encounter`.`InsuranceRecord`=`Insuranceschedule`.`Insurance_Id`) 
   LEFT OUTER JOIN `Production`.`Insco` `Ins1` 
   ON `Insuranceschedule`.`Ins1`=`Ins1`.`No`) 
   LEFT OUTER JOIN `Production`.`Insco` `Ins2` 
   ON `Insuranceschedule`.`Ins2`=`Ins2`.`No`) 
   LEFT OUTER JOIN `Production`.`Insco` `Ins3` 
   ON `Insuranceschedule`.`Ins3`=`Ins3`.`No`) 
   LEFT OUTER JOIN `Production`.`Insco` `Ins4` 
   ON `Insuranceschedule`.`Ins4`=`Ins4`.`No`) 
   LEFT OUTER JOIN `Production`.`Insco` `Ins5` 
   ON `Insuranceschedule`.`Ins5`=`Ins5`.`No`) 
   LEFT OUTER JOIN `Production`.`Insco` `Ins6` 
   ON `Insuranceschedule`.`Ins6`=`Ins6`.`No`}  
WHERE  (`Transact`.`Process_Date`>={d '2016-01-01'} 
  AND `Transact`.`Process_Date`<={d '2016-12-31'}) 
  AND `Transact`.`Client_No`=763  ORDER BY `Encounter`.`No`;

到目前为止,我们无法理解为什么这个结果几乎每次运行都会有所不同。 我们第一次可能获得57,568记录 第二次...... 30,102 第三次77,875 等等...... 它至少有十分之一会产生正确的结果。

我们有: - 倾倒表并重新加载它们。 - 检查表格上的排序规则。 - 尝试使用干净的数据导入来尝试不同的物理服务器。 - 尝试订购和不订购结果 - 看看EXPLAIN的任何问题 - 每次运行时总是一样的。

但是这个查询始终不一致,我们无法发现问题。我们在命令行上运行此查询,因此它不能是Crystal或ODBC - 除非它创建的查询是错误的?

提前感谢您查看此内容!

0 个答案:

没有答案