MySQL查询,用于参照具有条件的相关表的记录获取记录
我正在尝试一个查询以获得特定的结果,但没有得到任何运气 有人能帮我解决问题吗。在这里,我描述了我到底需要什么 我有三张桌子, 项目:包含项目详细信息。每个项目可以有不同的版本。因此,具有不同版本的相同项目具有相同的jobNo。项目只有一个版本,即最新版本始终处于活动状态,其他版本处于存档状态。 用户:包含系统中存在的用户详细信息。 分配的用户:此表包含分配给哪个项目的用户的信息 这是我的db设计图。 我需要一个查询,我想在其中的实时项目列表中,用户“aaaa”被分配到项目的实时版本或分配到项目的早期版本。 例如:从图像中,它应该显示项目(id=2,jobNo=100),因为它是实时版本。虽然aaaa未分配给V2版本,但分配给同一项目的V1版本 希望我清楚我的问题MySQL查询,用于参照具有条件的相关表的记录获取记录,mysql,sql,Mysql,Sql,我正在尝试一个查询以获得特定的结果,但没有得到任何运气 有人能帮我解决问题吗。在这里,我描述了我到底需要什么 我有三张桌子, 项目:包含项目详细信息。每个项目可以有不同的版本。因此,具有不同版本的相同项目具有相同的jobNo。项目只有一个版本,即最新版本始终处于活动状态,其他版本处于存档状态。 用户:包含系统中存在的用户详细信息。 分配的用户:此表包含分配给哪个项目的用户的信息 这是我的db设计图。 我需要一个查询,我想在其中的实时项目列表中,用户“aaaa”被分配到项目的实时版本或分配到项目
提前感谢。:) 前面我没有注意到您的桥接表。很抱歉,此查询应该会给出正确的结果:
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欢迎,保持你的信心;)