我有一个查询,我可以让它工作的唯一方法是在三个字段上离开连接。如果我在这三个字段上进行了普通的内连接,则查询什么也没有返回。但如果我单独尝试每个人加入,他们都会按照我的预期加入,例如鲍勃到鲍勃,书店到书店,面包到面包等。
所以对于这两组查询结果......
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级别查询:这些是构成第二级查询的较低级别查询
表:这些是构建所有其他查询的基表。
答案 0 :(得分:2)
好的,所以我下载了你的数据库并看一看。我发现如果你把NumStores查询放在你的内连接中,那么它会返回记录,然后放弃发货。我不想听起来很苛刻但是你在数据库设计不佳的道路上走得太远,你没有希望走得更远。在将继续给您带来问题的众多问题中有: 表中没有主键(没有任何类型的索引)。 对象(查询和表)的命名约定难以理解。 数据在许多不同的表中重复(规范化违规)。 主查询中的嵌入式子查询。 如果您想使用Access来帮助您,您需要学习如何使用它。
答案 1 :(得分:1)
对于记录,如果有人查看具有类似问题的此问题 - 进入主查询的查询之一是在该特定查询中未出现的字段上进行分组。一旦我从Group By子句中删除了该字段,主查询就会返回我期望的结果。
奇怪的是,查询实际上返回的结果与完全相同的行为有不同的行为,但是你去了。
答案 2 :(得分:1)
将来会遇到同样的问题(2017年,Access 2010)。 由于某种原因,左连接将带来完全相同的结果内连接带来并神秘地停止。 在“2013年2月11日9:54”消息之后,我注意到其中一个已加入的查询将未显示的Group By字段加倍(没有理由),所以我删除了它们。有效。 Access重新创建了未显示的Group By字段,但不再加倍,这就是(bug?)问题。