有一个表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
答案 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即可。