2010-06-15 4 views
1

J'ai une table candidate dites candidates ayant seulement id le champ et j'ai laissé joint profiles à elle. Le tableau profiles a 2 champs à savoir, candidate_id & name.Obtenir le dernier enregistrement à partir de la deuxième table à gauche jointe à la première table

par exemple. Tableau candidates:

id 
---- 
1 
2 

et Tableau profiles:

candidate_id  name 
---------------------------- 
     1   Foobar 
     1   Foobar2 
     2   Foobar3 

je veux le dernier nom d'un candidat dans une seule requête qui est donnée ci-dessous:

SELECT C.id, P.name 
    FROM candidates C 
LEFT JOIN profiles P ON P.candidate_id = C.id 
GROUP BY C.id 
ORDER BY P.name; 

Mais cette requête retourne:

1  Foobar 
2  Foobar3 

... Au lieu de:

1  Foobar2 
2  Foobar3 

Répondre

-1

Utilisez une sous-requête:

SELECT C.id, (SELECT P.name FROM profiles P WHERE P.candidate_id = C.id ORDER BY P.name LIMIT 1); 
2

Le problème est que votre table PROFILES ne fournit pas un moyen fiable de déterminer quelle est la dernière valeur est name. Il y a deux options pour la table PROFILES:

  1. Ajouter une colonne datetime IE: created_date
  2. Définition d'une colonne AUTO_INCREMENT

La première option est la meilleure - il est explicite, ce qui signifie l'utilisation du La colonne est absolument évidente et gère mieux les entrées antidatées.

ALTER TABLE PROFILES ADD COLUMN created_date DATETIME 

Si vous souhaitez que la valeur default to the current date & time lors de l'insertion d'un enregistrement si aucune valeur n'est, virer de bord ce qui suit à la fin:

DEFAULT CURRENT_TIMESTAMP 

Avec cela en place, vous devriez utiliser les éléments suivants pour obtenir le résultat souhaité:

SELECT c.id, 
      p.name 
    FROM CANDIDATES c 
LEFT JOIN PROFILES p ON p.candidate_id = c.id 
    JOIN (SELECT x.candidate_id, 
        MAX(x.created_date) AS max_date 
      FROM PROFILES x 
     GROUP BY x.candidate_id) y ON y.candidate_id = p.candidate_id 
            AND y.max_date = p.created_date 
GROUP BY c.id 
ORDER BY p.name 
Questions connexes