我敢肯定这很简单,但是我很难提出正确的update / select语句。
我有一张叫做POSTS的表。该表的POSTID为PK。它的PARENTID当前为NULL。它还具有GROUPID,该GROUPID具有将POST分组在一起的旧数值。
GROUPID的一个示例,如果我有三个帖子组成一个线程,则它们在GROUPID中的值都相同。
我想做的是遍历每条记录,记下POSTID和GROUPID,选择所有具有相同GROUPID的其他记录,并使用我在第一次搜索中记录的POSTID更新其PARENTID。
| POSTID | PARENTID | GROUPID |
| 109 | NULL | 20 |
| 110 | NULL | 20 |
| 111 | NULL | 20 |
| 112 | NULL | 21 |
| 113 | NULL | 21 |
我要使其如下:
| POSTID | PARENTID | GROUPID |
| 109 | NULL | 20 |
| 110 | 109 | 20 |
| 111 | 109 | 20 |
| 112 | NULL | 21 |
| 113 | 112 | 21 |
我希望这是有道理的。
谢谢!
最佳答案
假设我正确理解了您的问题,则可以使用join
聚合表将min
表恢复为自身。然后,您可以使用案例来确定最小帖子ID是否是父帖子。
这是执行此操作的一种方法:
select t.postid,
case when postid <> minpostid then minpostid end parentid,
t.groupid
from yourtable t
join (select groupid, min(postid) minpostid
from yourtable t2
group by groupid) t2 on t.groupid = t2.groupid
SQL Fiddle Demo
如果要
update
表中的数据,可以对join
使用相同的查询:update yourtable t
join (select groupid, min(postid) minpostid
from yourtable t2
group by groupid) t2 on t.groupid = t2.groupid
set t.parentid = case when postid <> minpostid then minpostid end;
More Fiddle
关于mysql - 嵌套SQL查询和更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23817241/