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

时间:2017-09-19 09:59:37

标签: mysql join left-join row

我有两个与主键和外键相关的表。 在第一个表中,我有一个包含属性(id,name,ip,...)的服务器列表。 在第二个表中,我想在将来的Update-Informations(id,server_id,last_update,next_update,...)中插入。

现在我想在我的GUI中显示第一个表中的Server-Attrinbutes,并且显示每个服务器的第二个表的最后一个条目,其中等于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

我已经使用声明 LIMIT 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

此外,我尝试使用 DISTINCT

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-Code中实现这个,但是请你告诉我如何在MySQL中这样做。

1 个答案:

答案 0 :(得分:0)

你试过下面的吗?

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