MySQL查询,用于参照具有条件的相关表的记录获取记录

MySQL查询,用于参照具有条件的相关表的记录获取记录,mysql,sql,Mysql,Sql,我正在尝试一个查询以获得特定的结果,但没有得到任何运气 有人能帮我解决问题吗。在这里,我描述了我到底需要什么 我有三张桌子, 项目:包含项目详细信息。每个项目可以有不同的版本。因此,具有不同版本的相同项目具有相同的jobNo。项目只有一个版本,即最新版本始终处于活动状态,其他版本处于存档状态。 用户:包含系统中存在的用户详细信息。 分配的用户:此表包含分配给哪个项目的用户的信息 这是我的db设计图。 我需要一个查询,我想在其中的实时项目列表中,用户“aaaa”被分配到项目的实时版本或分配到项目

我正在尝试一个查询以获得特定的结果,但没有得到任何运气

有人能帮我解决问题吗。在这里,我描述了我到底需要什么

我有三张桌子, 项目:包含项目详细信息。每个项目可以有不同的版本。因此,具有不同版本的相同项目具有相同的jobNo。项目只有一个版本,即最新版本始终处于活动状态,其他版本处于存档状态。 用户:包含系统中存在的用户详细信息。 分配的用户:此表包含分配给哪个项目的用户的信息

这是我的db设计图。

我需要一个查询,我想在其中的实时项目列表中,用户“aaaa”被分配到项目的实时版本或分配到项目的早期版本。 例如:从图像中,它应该显示项目(id=2,jobNo=100),因为它是实时版本。虽然aaaa未分配给V2版本,但分配给同一项目的V1版本

希望我清楚我的问题


提前感谢。:)

前面我没有注意到您的桥接表。很抱歉,此查询应该会给出正确的结果:

SELECT P . * 
    FROM project P
    WHERE id
    IN (
        SELECT MAX( id ) 
        FROM project
        GROUP BY jobNo
    )

    AND EXISTS (
    SELECT u.id AS userID
    FROM users u, assignedusers au, project p2
    WHERE p2.id = au.F_projectId
    AND au.F_userid = u.id
    AND u.userName LIKE  "aaaa"
    AND p2.name = P.name
    )

注意:如果您继续进行此DB设计,您肯定会面临许多其他问题,我建议您将版本保存在不同的表中,例如ProjectVersions,它应该在项目端具有1-many关系1,在ProjectVersions端具有许多关系。另外,请将这些v1、v2、v3保留为版本名,并保留它们的整数权重或状态,以指示
isLive
,这样您的查询将非常容易编写。

请检查下面的查询是否对您有帮助

SELECT pr.id, pr.jobNo 
FROM project pr 
JOIN (SELECT jobNo 
      FROM user_table u 
      JOIN Assign_User a ON u.id=a.F_userID 
      JOIN project p ON p.id=a.F_projectID WHERE u.id=2) a 
ON pr.jobNo=a.jobNo 
WHERE pr.islive='Y';

您能否显示您希望看到的
aaaa
输出?您好,pronox,谢谢您的解决方案。是的,我同意你的建议。由于这是一个现有的设计,我不能改变数据库的设计。我在开发这个设计的过程中也面临着很多问题。@Gourav欢迎,保持你的信心;)