首页 文章

MS Access查询结果 - 关系扩展

提问于
浏览
0

我有4个表:A,B,C和一个链接表 . 我想知道是否可以通过在A中设置标准从C中检索记录,其中链接表中有一条链接A和B的记录,以及B和C的链接表中的单独记录 .

这是关系的简化图像:

Here's a simplified image of the relationships

我已经尝试设置一个查询,显示A,B和C中的相关字段,标准设置为A.链接表存在于查询中 . 运行查询只返回来自B的链接记录 . 我应该在C的链接字段中添加标准吗? (我在查询的设计视图中这样做 - 我的知识SQL是有限的 . )

Relationship
.

来自Access的SQL:

SELECT Fruits.Fruit, Colour.Colour, Pests.Pest
FROM Pests RIGHT JOIN (Fruits RIGHT JOIN (Colour RIGHT JOIN [Linking Table] ON Colour.ID = [Linking Table].Colour) ON Fruits.ID = [Linking Table].Fruit) ON Pests.ID = [Linking Table].Pest
WHERE (((Pests.Pest)="Fly"));

输入:飞

输出:Apple

期望的输出:Apple和Red

链接表有一个记录,将水果的ID与害虫相关联,还有一个单独的记录,将水果的ID与颜色相关联 .

非常感谢任何帮助 .

1 回答

  • 0

    您正在使用链接表来获取2种链接 . 这是一种不好的做法(规范化要求表中的所有列都应该相关,并且列虫与列颜色无关) . 使用一个表格将颜色与水果联系起来,一个将害虫与水果联系起来将是一个更好的计划 .

    如果你愿意,你仍然可以使用它,但是你必须加入Linking Table两次(一次用于水果 - 害虫关系,一次用于水果 - 颜色关系)

    请尝试以下查询:

    SELECT Fruits.Fruit, Colour.Colour, Pests.Pest
    FROM Pests
    INNER JOIN [Linking Table] AS LT1 ON Pests.ID = LT1.Pest
    INNER JOIN Fruits ON LT1.Fruit = Fruits.ID
    INNER JOIN [Linking Table] AS LT2 ON Fruits.ID = LT2.Fruit
    INNER JOIN Colour ON LT2.Colour = Colour.ID
    

    此查询从Pest到Linking表再到Fruits,然后到Linking表的第二个实例,再到Color

相关问题