检索并移动每个组中的最后一条记录

时间:2017-12-14 11:24:53

标签: mysql

有一个表posts,其中包含如下所示的数据:( cover列目前没有数据)

id   title      cover
-----------------------
1    title       -
2    title       -

这是我的images表:

id     url     post_id
-----------------------
1    1.jpg       1
2    2.jpg       1
3    3.jpg       1
4    4.jpg       1
5    5.jpg       2
6    6.jpg       2

我想移动每个组的最后一条记录到posts表中的自己的列。(最后的记录应该从images表中删除并插入{ {1}} table)因此查询应该能够产生如下结果:

posts

2 个答案:

答案 0 :(得分:0)

使用 NOT EXISTS 获取id表中具有最大images的行。然后将其加入posts表。

<强>查询

select t1.`id`, t1.`title`, t2.`url`
from `posts` t1
join (
  select `id`, `url`, `post_id`
  from `images` t1
  where not exists (
    select 1 from `images` t2
    where t2.`post_id` = t1.`post_id`
    and t2.`id` > t1.`id`
  ) 
) t2
on t1.`id` = t2.`post_id`;

<强> Fiddle demo

答案 1 :(得分:0)

对于您的预期结果,您可以使用update join来执行此操作,

update posts p
join (
    select t1.post_id, t1.url
    from images t1
    join (
        select max(id) max_id, post_id from images group by post_id
    ) t2 on t1.post_id = t2.post_id and t1.id = t2.max_id
) t on p.id = t.post_id
set p.cover = t.url

请在此处查看demo

此外,如果你想删除&#39; last&#39;来自表images的图片,您可以使用delete

delete t1
from images t1
join (select max(id) max_id, post_id from images group by post_id) t2
on t1.post_id = t2.post_id
and t1.id = t2.max_id

如果要在一个查询中运行这两个查询,只需创建一个包含这两个查询的procudure即可。