MySQL Query用于获取记录,并引用具有条件的相关表的记录

时间:2014-04-14 06:46:51

标签: mysql sql

我正在尝试查询以获得特定结果,但没有运气。

任何人都可以帮我解决问题。我在这里描述我到底需要什么。

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

这是我的数据库设计的图像。 enter image description here

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

希望我对自己的问题很清楚。

提前致谢。 :)

2 个答案:

答案 0 :(得分:1)

之前我没有注意到你的桥表对不起,这个查询应该给你正确的结果:

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
    )

注意:如果你要继续使用这个数据库设计,你肯定会面临许多其他问题,我建议你将版本保存在不同的表中,比如ProjectVersions,它应该有1-Many关系1在项目方面ProjectVersions方面有很多。另外,请将这些v1,v2,v3保留为版本名称,并保留其int权重或状态以指示isLive或以某种方式查询您的查询非常容易。

答案 1 :(得分:1)

请检查以下查询是否对您有帮助。

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';