首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >连接2个表,并且只显示id - mysql的最大值。

连接2个表,并且只显示id - mysql的最大值。
EN

Stack Overflow用户
提问于 2015-08-06 14:53:38
回答 3查看 60关注 0票数 2

我有两个表,这些表保存关于我在查询中加入的绘图的信息。第一个表格包含图纸的唯一编号、标题和绘制对象。第二个表格包含修订和修改图纸的日期。

表1

代码语言:javascript
运行
复制
|dwg_id|project_no|sws_dwg_no|dwg_title|dwg_by|
|1     |153       |153-100   |Pipe...  |JS    |

表2

代码语言:javascript
运行
复制
|dwg_id|dwg_rev|dwg_date            |rev_id|
|1     |A      |2015-07-15 11:00:00 |1     |
|1     |B      |2015-07-23 12:00:00 |2     |
|1     |C      |2015-08-06 10:00:00 |3     |

我希望加入这两个表,并且只显示最近修改的绘图更改。

这是我当前的查询。

代码语言:javascript
运行
复制
SELECT 
    `drawings`.`dwg_id`, 
    `project_no`, 
    `sws_dwg_no`, 
    `client_dwg_no`, 
    `dwg_title`, 
    `dwg_by`, 
    `dwg_rev`.`dwg_rev`, 
    `dwg_rev`.`dwg_date`, 
    MAX(`dwg_rev`.`dwg_rev`) AS dwg_rev 
FROM 
    (`drawings`) 
    JOIN `dwg_rev` ON `drawings`.`dwg_id` = `dwg_rev`.`dwg_id` 
WHERE 
    `project_no` = '153' 
GROUP BY 
    `sws_dwg_no`, 
    `dwg_rev`.`dwg_rev` 
ORDER BY 
    `dwg_rev`.`dwg_date` ASC, 
    `dwg_rev`.`dwg_rev` ASC

此查询返回的结果不包含最新的修订编号,或者返回每个绘图的所有修订。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-06 15:27:26

您可以使用以下查询:

代码语言:javascript
运行
复制
SELECT d.*, dr.*
FROM drawings AS d
INNER JOIN (
   SELECT dwg_id, MAX(rev_id) AS maxRevId
   FROM dwg_rev
   GROUP BY dwg_id
) AS t ON d.dwg_id = t.dwg_id   
INNER JOIN dwg_rev AS dr ON t.dwg_id = dr.dwg_id AND t.maxRevId = dr.rev_id
WHERE project_no = 153

上面查询的关键点是使用一个派生表,该表返回最新的修订版,即MAX(rev_id),每个dwg_id。使用派生表上的INNER JOIN,您将完全从dwg_rev表中返回此行。

如果每个dwg_id都有多个project_no,那么使用上述内容是必要的。在本例中,上面的查询将为project_no = 153每次绘图获取最新的修订版。

Demo here

票数 1
EN

Stack Overflow用户

发布于 2015-08-06 15:03:31

如果您需要最新的修订,您应该订购下面的DESC检查代码。

而且,如果填充了dwg_rev.rev_id` DESC,则只能通过rev_id订购。

dwg_rev< dwg_rev.dwg_date, MAX(dwg_rev.dwg_rev) AS dwg_rev FROM (drawings) JOINdwg_revONdrawings.dwg_id=dwg_rev.dwg_id >dwg_rev>d20d20d21 sws_dwg_no, dwg_rev.dwg_rev ORDER BY dwg_rev.dwg_dateDESC, dwg_rev.dwg_revDESC LIMIT 1;

票数 0
EN

Stack Overflow用户

发布于 2015-08-06 15:08:52

有时候,MAX并不是最好的方法,相反,使用LIMIT试试如下:

代码语言:javascript
运行
复制
SELECT 
    `drawings`.`dwg_id`, 
    `project_no`, 
    `sws_dwg_no`, 
    `client_dwg_no`, 
    `dwg_title`, 
    `dwg_by`, 
    `dwg_rev`.`dwg_rev`, 
    `dwg_rev`.`dwg_date`, 
    `dwg_rev`.`dwg_rev` AS dwg_rev 
FROM 
    (`drawings`) 
    JOIN `dwg_rev` ON `drawings`.`dwg_id` = `dwg_rev`.`dwg_id` 
WHERE 
    `project_no` = '153' 
GROUP BY 
    `sws_dwg_no`, 
    `dwg_rev`.`dwg_rev` 
ORDER BY 
    `dwg_rev`.`dwg_date` DESC, 
    `dwg_rev`.`dwg_rev` DESC
LIMIT 1;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31859037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档