2010-03-27 2 views
3

У меня есть две таблицы, шоу и объекты. Я хочу распечатать последние объекты и имена для них. Сейчас я делаю это так:сложный SQL при подключении

SELECT MAX(objects.id) as max_id, shows.name, shows.id 
FROM shows, objects 
WHERE shows.id = objects.showId 
GROUP BY shows.name 

Однако, если я хочу, чтобы принести эпизод объекта, я не могу поставить его как SELECT object.episode [...], потому что тогда не будет автоматически выбрать объект, который MAX(objects.id), так мой вопрос, как это сделать?

Если вы еще не выяснили, мои таблицы они так:

  • показывает
    • идентификатор
    • имя

, а также:

  • Объекты
    • ID
    • имя
    • эпизод
    • сезон
    • showId

Использование MySQL. Благодаря!

+0

Является ли производительность проблема? Сколько строк у вас в каждой таблице? –

ответ

1

Что-то вроде этого (непроверенные):

SELECT objects.id as max_id, objects.episode, shows.name, shows.id 
    FROM shows, objects 
WHERE shows.id = objects.showId 
    AND objects.id = (
     SELECT MAX(id) FROM objects 
     WHERE name = shows.name 
     ) 
+0

это действительно работает! однако предложение WHERE должно быть в идентификаторах. Благодаря! – Erik

+0

Не уверен на 100%, но я думаю, что '=' должен работать так же хорошо, как 'IN' (это то, что вы имели в виду?), И может быть быстрее, поскольку он дает подсказку оптимизатору, что ожидается только одна строка. –

0
SELECT objects.id as max_id, shows.name, shows.id 
FROM shows, objects 
WHERE shows.id = objects.showId 
ORDER BY objects.id DESC 
GROUP BY shows.name 
LIMIT 1 

Это делает то, что вам нужно?

+1

Это возвращает только один объект. OP хочет самый последний объект для каждого имени и связанного эпизода. –

0

Я получаю чувство что-то подобное будет работать также:

SELECT objects.id, objects.episode, shows.name, shows.id 
FROM shows 
JOIN objects AS objects_for_max ON shows.id = objects.showId 
JOIN objects ON objects.id=MAX(objects_for_max.id) 
GROUP BY shows.name 
Смежные вопросы