Access 2007 - Left Join返回正确的结果,Inner Join不返回任何内容

时间:2013-02-07 16:00:09

标签: ms-access left-join inner-join resultset missing-data

我有一个查询,我可以让它工作的唯一方法是在三个字段上离开连接。如果我在这三个字段上进行了普通的内连接,则查询什么也没有返回。但如果我单独尝试每个人加入,他们都会按照我的预期加入,例如鲍勃到鲍勃,书店到书店,面包到面包等。

所以对于这两组查询结果......

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,或者它是否可能是数据中的问题?

-edit -

通过将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"

再没有回报!

-edit 2 -

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

-edit 3 -

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

01顶级查询:这两个都是相同的,但是一个引用表,并且有效;另一个是查询,不起作用。我想找出查询版本为什么不起作用的原因。

02二级查询和表:每组数据有两个版本 - 一个是查询,另一个是使用查询的生成表版本制作的表。就我所知,两者都是相同的。

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

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

对于记录,如果有人查看具有类似问题的此问题 - 进入主查询的查询之一是在该特定查询中未出现的字段上进行分组。一旦我从Group By子句中删除了该字段,主查询就会返回我期望的结果。

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

答案 2 :(得分:1)

将来会遇到同样的问题(2017年,Access 2010)。 由于某种原因,左连接将带来完全相同的结果内连接带来并神秘地停止。 在“2013年2月11日9:54”消息之后,我注意到其中一个已加入的查询将未显示的Group By字段加倍(没有理由),所以我删除了它们。有效。 Access重新创建了未显示的Group By字段,但不再加倍,这就是(bug?)问题。