如何从不同的表中获取最大版本并加入表?

Posted

技术标签:

【中文标题】如何从不同的表中获取最大版本并加入表?【英文标题】:How to get max version from different table and join the table? 【发布时间】:2019-09-16 15:47:24 【问题描述】:

我必须将项目表与表 2 连接起来,我面临的问题不是连接,而是在表 2 中有列名称版本,因此一个项目可以有多个版本,我想加入项目表和表 2 和我只想从表 2 中获取项目的 Max 版本的数据。 我尝试将表 2 加入到项目中并应用 MAX 函数,该函数为我提供了正确的信息,但主要问题 id 我也想要数据中表 2 的 ID 列,但是当我尝试时出现错误。

我尝试加入 Prject 表和表 2 并在 Select 子查询中应用 MAX 函数。给了我正确的数据,但是当我包括从表 2 中再获取一列 id 时,它给了我错误。

ERRO"Msg 8120, Level 16, State 1, Line 12 列 'table2.Id' 在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。 消息 116,第 16 级,状态 1,第 14 行 当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。 "

SELECT
p.ProjectId,
p.ProjectName,
p.ProjectStatusId,
ps.Description AS ProjectStatusDescription,
ph.Description AS ProjectPhaseDescription,
   (Select MAX(t2.version), w.id from Table2 t2 join project on t2.id =  
    project.id group by t2.Projectid)

FROM 
Project p
JOIN ProjectStatus ps on p.ProjectStatusId = ps.ProjectStatusId
JOIN ProjectPhase ph on p.ProjectPhaseId = ph.ProjectPhaseId
where p.projectid = 32388 

项目表列 - 项目 ID、项目名称、项目状态 表 2 列 - id,版本 条件 - 我只想要表 2 中的最大版本

【问题讨论】:

w. 别名代表什么表?以及它是如何连接到其余表的? 抱歉,错误 id 来自表 2,应该是 t2.id 而不是 w.id 【参考方案1】:

加入聚合Table2 表的子查询可能是您想要的:

SELECT
    p.ProjectId,
    p.ProjectName,
    p.ProjectStatusId,
    ps.Description AS ProjectStatusDescription,
    ph.Description AS ProjectPhaseDescription,
    adfadf
FROM Project p
INNER JOIN ProjectStatus ps
    ON p.ProjectStatusId = ps.ProjectStatusId
INNER JOIN ProjectPhase ph
    ON p.ProjectPhaseId = ph.ProjectPhaseId
INNER JOIN
(
    SELECT Projectid, MAX(version) AS max_verison
    FROM Table2
    GROUP BY Projectid
) t2
    ON t2.id = p.id     -- unsure of this join condition
WHERE
    p.projectid = 32388;

正如我上面评论的那样,我不确定确切的连接条件应该是什么。您基本上希望将Table2 中的Projectid 的最大子查询连接到外部查询中逻辑上匹配的列。

【讨论】:

非常感谢。但是我可以再问一个问题吗? 如果我试图将表中的 ID 列附加到它会给我多个数据。选择 p.ProjectId, p.ProjectName, p.ProjectStatusId, ps.Description AS ProjectStatusDescription, ph.Description AS ProjectPhaseDescription, wa.ProjectId, wa.maxverison, w.id SELECT p.ProjectId, p.ProjectName, p.ProjectStatusId, ps.Description AS ProjectStatusDescription, ph.Description AS ProjectPhaseDescription, wa.ProjectId, wa.maxverison, w.id FROM Project p INNER JOIN ProjectStatus ps ON p.ProjectStatusId = ps.ProjectStatusId INNER JOIN ProjectPhase ph ON p.ProjectPhaseId = ph.ProjectPhaseId INNER JOIN (SELECT MAX(waversion) AS maxverison,ProjectId FROM WorkAuthorization GROUP BY ProjectId) wa ON wa.projectid = p.projectid INNER JOIN (Select ID,ProjectId from WorkAuthorization)w on w.ProjectId = p.ProjectId WHERE p.projectid = 32388;

以上是关于如何从不同的表中获取最大版本并加入表?的主要内容,如果未能解决你的问题,请参考以下文章

通过 id 从一个表中获取数据并显示在不同的不同页面中

如何从不同的表中以最优化的方式获取国家、州、城市名称

如何从 Treeview / Tkinter (SQLite) 中的不同表中获取不同的值?

MySQL 从两个不同的表中获取 user_id 和密码的查询

如何从两个不同的、不相关的表中获取最新的行,并将它们合并到一个结果集中?

使用 ADO.NET、Generic 从不同的表中获取 SQL 数据