问题描述
我正在尝试更新同事的 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'。