MySQL对于第一个表中的每个ID仅从第二个表中选择一个行



我有两个与主钥匙相关的表。在第一个表中,我有一个带有属性(ID,name,ip,...)的服务器列表。在第二个表中,我想插入将来的更新信息(id,server_id,last_update,next_update,...)。

现在,我想在我的gui中显示第一个表的server-attrinbutes,唯一的使用equals server_id的每个服务器的第二个表中的最后一个条目。

表1:

id
name
ip
description
.
.

表2:

id
server_id
last_update
next_update
.
.

这是我已经尝试过的一个简短示例:

select s.id, s.name, sp.last_update, sp.next_update
from server s
left join (select * from server_updates order by server_id desc) sp
on sp.server_id = s.id

我已经使用语句限制1

select s.id, s.name, sp.last_update, sp.next_update
from server s
left join (select * from server_updates order by server_id desc limit 1) sp
on sp.server_id = s.id

也尝试使用不同的

select DISTINCT s.id, s.name, sp.last_update, sp.next_update
from server s
left join (select * from server_updates order by server_id desc limit 1)

但是我总是从第二个表

获得所有条目
+------------+-----------------+---------------+------------+------------+
| Server0101 | Server0101_name | Server0101_ip | 2017-09-20 | 2017-10-20 |
| Server0101 | Server0101_name | Server0101_ip | 2017-10-20 | 2017-11-20 |
| Server0102 | Server0102_name | Server0102_ip | 2017-05-01 | 2017-06-01 |

我只想从第一个表中的每个ID中的第二行中的一行。

当然我可以在我的Java代码中实现此功能,但是请您告诉我如何在MySQL中执行此操作。

您是否尝试过以下一个?

select s.id, s.name, sp.last_update, sp.next_update
from server s
left join (select * from server_updates where server_id =s.id order by server_id desc limit 1) sp
on sp.server_id = s.id

最新更新