我确信这很简单,但我很难找到正确的更新/选择声明。
我有一张叫做POSTS的桌子。该表有POSTID,即PK。它有PARENTID,它目前都是NULL。它还具有GROUPID,其具有将POSTS组合在一起的传统数值。
GROUPID的一个例子,如果我有三个组成单个帖子的帖子,它们在GROUPID中都会有相同的值。
我要做的是循环遍历每条记录,记下POSTID和GROUPID,选择具有相同GROUPID的所有其他记录,并使用我在第一次搜索时记下的POSTID更新它们的PARENTID。 / p>
| 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 |
我希望这是有道理的。
谢谢!
答案 0 :(得分:2)
假设我正确理解了您的问题,您可以join
使用min
聚合回复自己的表格。然后,您可以使用大小写来确定min post 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
如果您想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;