2010-03-27 72 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

也:

  • 对象
    • ID
    • 插曲
    • 赛季
    • showId

使用MySQL。谢谢!

+0

是性能低下的问题?你在每张桌子上有多少行? – 2010-03-27 23:54:42

回答

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子句应该在ID中。谢谢! – Erik 2010-03-28 00:02:13

+0

不是100%确定的,但我认为'='应该和'IN'一样工作(这是你的意思?),并且可能会更快,因为它向优化器提示只有一行是预期的。 – 2010-03-28 00:31:16

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要为每个名称和相关情节提供最近的对象。 – 2010-03-27 23:51:49

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