Lorsque je rejoins intérieurement la deuxième table, je veux seulement joindre une seule ligne. Le critère consiste à prendre la ligne avec l'entier le plus élevé dans la colonne de niveau. Je pensais quelque chose comme ceci:Inner joindre une seule ligne en obtenant seulement la plus haute ligne entière
SELECT *
FROM file_repo
INNER JOIN
( SELECT
MAX(files.level)
FROM
files
) ON file_repo.id = files.repo_id
Pour chaque ligne de file_repo je vais obtenir une seule rangée de fichiers avec la valeur la plus élevée dans la colonne de niveau.
Cette solution semble fonctionner plutôt lentement par rapport à l'autre (10x environ). Quel est le problème qui se produit lorsque deux file_repo partagent le même niveau dans l'autre exemple? Est-ce juste un choix incohérent de fichier correspondant? –
@ebyrob: vous obtiendrez tous les derniers fichiers au lieu d'un. Notez que les performances dépendent de la façon dont les tables sont indexées, et l'autre solution peut être plus rapide si vous avez beaucoup de repos vides (sans aucun fichier). – Quassnoi