gpt4 book ai didi

mysql - 从 3 个表中选择行

转载 作者:行者123 更新时间:2023-11-29 19:10:47 25 4
gpt4 key购买 nike

我很欣赏有很多教程和示例解释 JOIN 概念 - 但是我正在努力将这些示例应用到我的特定场景中。我希望得到一些帮助,如果要求不是太多的话,请详细说明解决方案中发生的情况以实现所需的结果。

3 个表:用户、评估、评估日志。

用户

+--------+------+------+-----------+----------+-----------+-------+--------+-----------+---------------+------+----------+
| UserID | User | Pass | FirstName | LastName | LastLogin | Email | Mobile | Kenitalla | AccountStatus | Role | Operator |
+--------+------+------+-----------+----------+-----------+-------+--------+-----------+---------------+------+----------+

评估

+--------------+------+-----------+-----------+-----------+-----------+-----------+--------------+----------+---------+----------+
| AssessmentID | Name | Criteria1 | Criteria2 | Criteria3 | Criteria4 | Criteria5 | RoleRequired | Required | Renewal | Operator |
+--------------+------+-----------+-----------+-----------+-----------+-----------+--------------+----------+---------+----------+

评估日志

+-----------------+------+----------------+------------+--------+-----------+----------+----------+----------+----------+----------+----------+---------+---------------+---------+
| AssessmentLogID | Date | AssessmentName | AssessedBy | UserID | StaffName | Comments | Verdict1 | Verdict2 | Verdict3 | Verdict4 | Verdict5 | Verdict | RenewalPeriod | NextDue |
+-----------------+------+----------------+------------+--------+-----------+----------+----------+----------+----------+----------+----------+---------+---------------+---------+

当用户进行评估时,评估日志中会记录一个条目。有些评估是必需的(“必需”列中的正确或错误),而有些评估是可选的。 RoleRequired 列规定了需要评估的用户角色。

我想生成一份用户列表以及他们尚未通过的评估。评估必须是必需的,并且所需的角色必须与用户角色相匹配。如果评估日志中缺少“Verdict”列中的“Pass”条目,则表示评估尚未通过。

简单来说,我正在寻找一个将实现以下结果的查询:

+------------------+-----------------+----------------+
| assessments.Name | users.FirstName | users.LastName |
+------------------+-----------------+----------------+

在需要评估的情况下(Required 等于 true),RequiredRole 与 users.Role 列匹配,并且评估日志中没有 Verdict 列包含“通过”值的评估条目。

如果需要进一步说明,请告诉我。

提前致谢!

最佳答案

我建议使用 LEFT JOIN。

首先,我们生成评估和用户的叉积,其中包含每个用户的角色所需的所有评估。

然后,LEFT JOIN 检查这些评估是否已通过。

SELECT ...
FROM
users u
JOIN assessments a ON (a.RoleRequired = u.Role)
LEFT JOIN assessment_logs al ON (
al.AssessmentID = a.AssessmentID
AND al.UserID = u.UserID
AND al.Verdict='Pass'
)

WHERE
a.required
AND al.UserID IS NULL

关于mysql - 从 3 个表中选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43099965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com