【发布时间】:2017-07-30 06:33:36
【问题描述】:
我在 Access 中遇到了一个奇怪的行为。我的 VBA 项目中基本上有两个预定义的查询,它们在程序的不同部分都需要,它们运行良好。
现在我需要一个将两个结果集作为一个返回的查询。所以我去解决方案是创建一个结合其他两个查询的新查询。就像:
SELECT * FROM query1
UNION
SELECT * FROM query2;
两个查询在其结果中具有相同的布局。但是,如果 query1 的结果为空并且 query2 在其结果中有一些记录,我会从上面的代码中收到一个空结果。另一种方式(query2 的空结果 - query1 的几个结果)它为我提供了一个完整的结果。
我还在切换两个查询的情况下测试了上面的代码。但行为是一样的。 UNION ALL 也是如此。
这可能是什么问题?
编辑:所以,我做了一些进一步的测试。原因似乎在query2中。它甚至不能与自己联合。所以如果我尝试:
SELECT * FROM query2
UNION ALL
SELECT * FROM query2;
我又得到了一个空集。当我只在 SELECT 部分中使用一个字段时也是如此。
Edit2:好的,它会变得更好。数据集是空的,但在查询结果的表视图中,我在列的过滤器中拥有所有数据。但是如果我做一个 Count(rowname) 我得到一个 0 作为回报。
【问题讨论】:
-
尝试列出字段而不是使用
*。 -
遗憾的是,这并没有解决问题。但是感谢您的尝试。 ;)
-
明确一点,当两个查询都至少有一条记录时,或者如果 query2 至少有一条记录,一切都按预期工作?只有当 query1 没有返回记录时才会出现问题?你能提供这些查询的 SQL 吗?您是否尝试过用完整的 SQL 代码替换
query1和query2?这可能会给你一个有意义的错误。 -
不,即使查询 2 中有结果,UNION 也总是失败。经过两天的测试,我受够了并将代码移到另一台机器上。在那里工作。因此,在将其导出到新机器并将其传输到我的 PC 后,一切都正常运行。所以我想这是与我使用的前端有关的问题。 :/但仍然是一个很大的“谢谢!”供您输入。 ;)