我在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 - 除非它创建的查询是错误的?
提前感谢您查看此内容!