我正在尝试查询以获得特定结果,但没有运气。
任何人都可以帮我解决问题。我在这里描述我到底需要什么。
我有三张桌子, 项目包含项目详细信息。每个项目都可以有不同的版本。因此,具有不同版本的相同项目具有相同的jobNo。只有一个版本的项目,即最新版本始终存在,其他版本存档。 用户:包含系统中存在的用户详细信息。 指定用户:此表包含分配给哪个项目的用户的信息。这是我的数据库设计的图像。
我需要一个查询,其中我想要实时项目列表,其中用户“aaaa”被分配到项目的实时版本或分配给项目的先前版本。 对于Ex:从图像中,它应该显示项目(id = 2,jobNo = 100),因为它是实时版本。虽然aaaa未分配给V2版本,但它被分配到同一项目的V1版本。
希望我对自己的问题很清楚。
提前致谢。 :)
答案 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';