MS Access SQL 在 where 子句中加入表时没有收到结果

问题描述

我正在尝试更新同事的 MS Access 应用程序(使用 vb 代码)。我在编写 sql 查询方面颇有经验,但我无法解决以下问题。

我要修复的查询使用传递查询的结果和本地 MS Access 表,并在 where 子句中将它们连接在一起(我尝试使用 ON 的正常方式,但似乎这不起作用当涉及传递查询时)。我在 where 子句中连接表的经验很少但是在 where 子句中连接表时,是否有这样的事情我不能在 where 子句中使用某些列(两个表的)? -> 当我使用诸如 columnA 'somerandomtext' 之类的过滤条件(总是满足,只是为了指出问题)时,查询结果为空。当我在 where 子句中删除一个条件时,查询返回结果(虽然太多,因为我无法相应地过滤它们)。

此外:我检查了传递查询,结果是正确的。我查了MS-Access表,表中的数据是正确的。因此,我认为我在加入上述两个的查询中可能做错了什么。

查询按预期工作并返回结果:

SELECT t.tr_id,t.ser_num,t.contrgnt_id,t.pos_ekey,t.sernum AS cmdty,format(t.vol,""##,###,###.00"") AS volume,t.unit_def,t.value_date,format(t.coup,###.00"") AS fixprice,format(s.calcvarprice,###.00"") AS marketprice,format(s.calcamount,###.00"") AS payamount,format(s.settlevarprice,##0.00"") as settleprice,format(s.settleamount,##0.00"") as settleamount,s.sync
FROM pms_trans AS t,settledata AS s
WHERE t.tr_id=s.tr_id And t.is_booked='N' And t.value_date>='01.01.2021' And t.value_date<='01.04.2021'

查询以某种方式返回 0 结果:

SELECT t.tr_id,settledata AS s
WHERE t.tr_id=s.tr_id And t.is_booked='N' And t.pos_ekey <> 'BGGS' And t.value_date>='01.01.2021' And t.value_date<='01.04.2021'

如前所述,我怀疑通过 where-clause 加入时存在一些限制(虽然我没有在网上找到足够的信息)。

此致并提前致谢,

彼得

解决方法

首先,为日期表达式应用正确的语法:

WHERE t.tr_id=s.tr_id And t.is_booked='N' And t.pos_ekey <> 'BGGS' And t.value_date >= #2021-01-01# And t.value_date <= #2021-04-01#

接下来,仔细检查 pos_ekey 的值。例如,尝试直接在表视图中的字段上应用过滤器 'BGGS'。