1

我有一个查询,我可以让它工作的唯一方法是在三个字段上左加入。如果我对这三个字段进行普通的内部联接,则查询不会返回任何内容。但是,如果我尝试单独加入每个人,他们都会按照我的预期加入,例如 Bob 到 Bob、Bookshop 到 Bookshop、Bread 到 Bread 等。

那么对于这两组查询结果...

1.Manager  1.Shop     1.Product  1.Cost     2.Manager  2.Shop     2.Product   2.Quantity
Bob        Hardware   Spanners    15        Bob        Hardware   Spanners     3
Terry      Food       Bread       12        Terry      Food       Bread        4
Sue        Bookshop   Books       18        Sue        Bookshop   Books        7

...此查询不返回任何结果:

SELECT 1.Manager, 1.Shop, 1.Product, 1.Cost, 2.Quantity
FROM 1 INNER JOIN 2 ON 1.Manager = 2.Manager AND 1.Shop = 2.Shop AND 1.Product = 2.Product;

我知道加入文本并不理想,但我有类似的查询可以毫无问题地加入这三个字段,所以想知道这是否是我遇到的 Access 的“功能”,或者它是否可能是数据?

-编辑-

通过将 JOIN 条件改为 WHERE 子句,我发现,如果我有 WHERE 1.Manager = "Bob" AND 2.Manager = "Bob:

WHERE 1.Product = "Spanners"

独立工作,并且:

WHERE 2.Product = "Spanners"

单独工作,但将两者结合起来:

WHERE 1.Product = "Spanners" AND 2.Product = "Spanners"

再次返回什么!

-编辑2-

主查询在引用表中的数据时确实表现正常。因此,基本查询返回结果的方式可能有些奇怪。

-编辑 3-

这是问题示例的链接:[链接已删除]

01 顶级查询:这两个是一样的,但一个是指表,并且是有效的;而另一个是指查询,并且不起作用。我想找出为什么查询版本不起作用。

02 2nd Level Queries and Tables:每组数据有两个版本 - 一个是查询,另一个是使用查询的 Make Table 版本制作的表。据我所知,两者都是相同的。

03 和 04 级查询:这些是构成第二级查询的较低级别查询

表:这些是构建所有其他查询的基础表。

4

3 回答 3

2

好的,所以我下载了您的数据库并查看了。我发现如果你把 NumStores 查询放在你的内部连接中,那么它会返回记录,然后就放弃了。我不想听起来很苛刻,但是您在糟糕的数据库设计的道路上已经走得太远了,您没有希望走得更远。将继续给您带来问题的许多问题包括: 表中没有主键(没有任何类型的索引)。对象(查询和表)的难以理解的命名约定。数据在许多不同的表中重复(规范化违规)。主查询中的嵌入子查询。如果您想使用 Access 来帮助您,您需要学习如何使用它。

于 2013-02-08T19:35:17.800 回答
1

作为记录,如果有人看到这个问题有类似的问题 - 输入主查询的查询之一是在一个字段上分组,该字段没有出现在该特定查询的任何地方。一旦我从 Group By 子句中删除了该字段,主查询就会返回我预期的结果。

奇怪的是,查询本质上返回了完全相同的结果,但行为不同,但你去了。

于 2013-02-11T09:54:53.150 回答
1

未来(2017 年,Access 2010)在这里也遇到了同样的问题。出于某种原因,Left Join 会产生与 Inner Join 完全相同的结果,但它却神秘地停止了。在“2013 年 2 月 11 日 9:54”消息之后,我注意到其中一个加入的查询使未显示的 Group By 字段增加了一倍(没有理由),所以我删除了它们。有效。Access 重新创建了未显示的 Group By 字段,但不再加倍,这就是(错误?)问题。

于 2017-03-23T15:22:16.717 回答