У меня есть данные, которые выглядят так:
entities
id name
1 Apple
2 Orange
3 Banana
Периодически процесс запускается и выставляет оценку каждой сущности. Процесс генерирует данные и добавляет их в таблицу оценок следующим образом:
scores
id entity_id score date_added
1 1 10 1/2/09
2 2 10 1/2/09
3 1 15 1/3/09
4 2 10 1/03/09
5 1 15 1/4/09
6 2 15 1/4/09
7 3 22 1/4/09
Я хочу иметь возможность выбрать все объекты вместе с последними записанными баллами для каждого, что приведет к таким данным:
entities
id name score date_added
1 Apple 15 1/4/09
2 Orange 15 1/4/09
3 Banana 15 1/4/09
Я могу получить данные для одного объекта, используя этот запрос:
SELECT entities.*,
scores.score,
scores.date_added
FROM entities
INNER JOIN scores
ON entities.id = scores.entity_id
WHERE entities.id = ?
ORDER BY scores.date_added DESC
LIMIT 1
Но я не понимаю, как выбрать одно и то же для всех сущностей. Может, это смотрит мне в лицо?
Большое спасибо за то, что нашли время.
Спасибо за отличные ответы. Я дам ему несколько дней, чтобы посмотреть, не появится ли предпочтительное решение, а затем выберу ответ.
ОБНОВЛЕНИЕ: я пробовал несколько из предложенных решений, основная проблема, с которой я столкнулся сейчас, заключается в том, что если у объекта еще нет сгенерированной оценки, они не отображаются в списке.
Как будет выглядеть SQL, чтобы гарантировать, что все объекты будут возвращены, даже если у них еще нет оценок?
ОБНОВЛЕНИЕ: ответ выбран. Спасибо всем!