我在VBA Excel中使用ADODB连接到现有的DBF数据库来解析信息并生成报告。我的SQL语句可能不是最好的,但它们似乎有效。然而,我的查询结果遇到了一个奇怪的问题,经过调查发现,在某些后方情况下,我的查询会返回错误的数据。我原来的SQL语句如下所示:
SELECT nofac,
class,
branch,
Iif(dental = true, pedental + pbdental, NULL) AS prim1,
Iif(dental2 = true, pedental + pbdental, NULL) AS prim2,
Iif(dental3 = true, pedental + pbdental, NULL) AS prim3,
Iif(dental4 = true, pedental + pbdental, NULL) AS prim4,
pxdental AS tax,
social_ins
FROM base.dbf
WHERE nofac BETWEEN 123456 AND 123458
base.dbf包含大约400k条记录,100条与nofac = 123456匹配。 PEDENTAL和PBDENTAL持有费率金额,而牙科虽然牙科4指示它的速率类型(布尔值)。
我注意到的问题是prim1 + prim2 + prim3 + prim4的总数将大于记录集的所有PEDENTAL + PBDENTAL的总数。这应该是不可能的。
我重新运行我的SQL语句,看看是什么导致数据损坏,并注意到在某些情况下,大约5%的时间牙科,牙科2都会返回true,有时所有4都会返回true。
SELECT nofac,
class,
branch,
dental,
dental2,
dental3,
dental4,
social_ins
FROM histemp.dbf
WHERE nofac = 123456
但是,这是我停止了解正在发生的事情的地方。如果我查看返回多个trues的记录的原始数据,我发现4个值中只有一个设置为true。此外,如果我重申我的语句添加一个辅助where子句来隔离损坏的记录,结果就是它应该如何,只有一个true。
例如,上面示例中的第3行将显示为仅查询该单行:
。错误的错误
有没有人知道我做错了什么,或者发生了什么事?