2017-09-19 2 views
-1

J'ai deux tables en relation avec les clés primaire et étrangère. Dans la première table J'ai une liste de serveurs avec des attributs (id, nom, ip, ...). Dans la deuxième table Je souhaite insérer dans les futures informations de mise à jour (id, id_serveur, last_update, next_update, ...).MySQL Sélectionnez une seule ligne de la deuxième table, pour chaque ID de la première table.

Maintenant, je veux montrer dans mon interface graphique le serveur-Attrinbutes de la première table et seulement la dernière entrée de la deuxième table pour chaque serveur avec est égal à server_id.

Tableau 1:

id 
name 
ip 
description 
. 
. 

Tableau 2:

id 
server_id 
last_update 
next_update 
. 
. 

Voici un court exemple, comment je l'ai déjà essayé:

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 

je l'ai déjà essayé avec la déclaration 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 

J'ai aussi essayé d'utiliser 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) 

Mais j'ai toujours obtenu tous entrys de deuxième table

+------------+-----------------+---------------+------------+------------+ 
| 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 | 

Je veux juste une ligne de la deuxième table pour chaque ID de la première table.

Bien sûr, je peux implémenter ceci dans mon code JAVA, mais pouvez-vous me dire comment faire cela en MySQL.

+0

https://dev.mysql.com/doc/refman/5.7/en/example-maximum-column-group-row.html – CBroe

Répondre

0

Avez-vous essayé la commande ci-dessous?

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 
+0

Salut Nidhi257, merci pour la réponse rapide. Je l'ai essayé maintenant mais j'ai l'erreur suivante: # 1054 - Colonne inconnue 's.id' dans 'where clause'. – P3llazgu