0

我有以下问题要问,也许你可以帮忙。我确实在这里也发现了类似的问题,但无法真正找出有效的方法来使其发挥作用。

我正在为使用 Access 数据库的客户开发此应用程序。

  1. 我有 2 个表,它们之间是多对多的关系。一个表是 Grants,另一个表是 Key_People。

  2. 为了支持多对多关系,我创建了另一个名为 Key_People_To_Grants 的表。

  3. 为了简化我的示例:我的 Grant 表包含:GrantID 和 GrantName 我的 Key_People 表包含:KeyPersonID 和 KeyPersonFName 和 KeyPersonLName 我的 Key_People_To_Grants 表当然包含:KeyPersonID 和 GrantID

  4. 我正在尝试使用带有此查询的 LEFT JOIN 获取所有 Grants,它工作得很好,我得到了 Key_People_To_Grants 表中的 Grants 以及其他尚未链接到 Key_People 的 Grants,这是根据需要。这是我正在使用的查询:

    SELECT Grants.*, Key_People.firstName, Key_People.lastName FROM (Grants LEFT JOIN Key_People_To_Grants ON Grants.grantID = Key_People_To_Grants.grantID) LEFT JOIN Key_People ON Key_People_To_Grants.keyPersonID = Key_People.personID;

这个查询的唯一问题,正如我在网上许多关于 JOIN 的帖子中发现的那样,如果给定的 Grant 分配给多个 Key_People,它会返回重复的 Grants 记录。我尝试使用 Distinct(正如我在下面的查询中列出的那样),如果我只从 Grants 表中选择信息,它就可以工作,但只要我还要求 Key_People.firstName 和 Key_People.lastName 信息,Distinct 当然可以不行。

SELECT DISTINCT Grants.*, Key_People.firstName, Key_People.lastName
FROM (Grants LEFT JOIN Key_People_To_Grants ON Grants.grantID =
Key_People_To_Grants.grantID) LEFT JOIN Key_People ON 
Key_People_To_Grants.keyPersonID = Key_People.personID;

您对如何完成摆脱返回的重复信息有任何建议,但仍然能够在我的示例中加入表格?

非常感谢

4

1 回答 1

1

我想你正在寻找这样的东西:

SELECT g.*, kp.firstName, kp.lastName
FROM `Grants` g
LEFT JOIN (
    SELECT MIN(keyPersonID) AS kpid, grantID 
        FROM key_people_to_grants 
        GROUP BY grantID
) kpg ON kpg.grantID = g.grantID
LEFT JOIN Key_People kp ON kp.personID = kpg.kpid
于 2013-04-03T19:37:03.270 回答