加入时的SQL技巧
我有两张桌子、两个节目和两个对象。我想打印出最新的对象,以及它们的显示名称。现在我是这样做的:加入时的SQL技巧,sql,mysql,Sql,Mysql,我有两张桌子、两个节目和两个对象。我想打印出最新的对象,以及它们的显示名称。现在我是这样做的: 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.插曲[…]那样放置它,因为这样就不会自动选择对象MAX(objects.i
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.插曲[…]
那样放置它,因为这样就不会自动选择对象MAX(objects.id)
,所以我的问题是如何做
如果你还没有弄清楚我的桌子,它们是这样的:
- 显示
- 身份证
- 名字
- 物体
- 身份证
- 名字
- 插曲
- 时令
- 肖维德
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
这能满足您的需要吗?类似这样的东西(未经测试):
我感觉像这样的东西也会起作用:
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
这只返回一个对象。OP希望每个名称和相关插曲的最新对象。性能是否有问题?每个表中有多少行?这确实有效!但是WHERE子句应该在ids中。谢谢不是100%确定,但我认为
=
应该和中的一样好(这就是你的意思吗?)并且可能更快,因为它向优化者暗示只需要一行。
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