table_user
id user shangjiaid vip
1 用户A 2 0
2 用户B 3 0
3 用户C 2 0
4 用户D 5 0
5 用户E 5 0
6 用户F 5 0
7 用户G 2 0
8 用户H 5 0
9 用户J 2 0
10 用户K 5 0
11 用户K 5 0
12 用户K 7 0
13 用户K 12 0
更新VIP等于1
比如 id=5的这个人 下家的数量满足3个 然后更新vip=1
用一句sql能update更新? 这个应该属于递归...
就是说每个人都有上家...如果这个人下家满足3个人..然后更新VIP=1
update结果集
table_user
id user shangjiaid vip
5 用户E 5 1
2 用户B 3 1
table_user
id user shangjiaid vip
1 用户A 2 0
2 用户B 3 0
3 用户C 2 0
4 用户D 5 0
5 用户E 5 0
6 用户F 5 0
7 用户G 2 0
8 用户H 5 0
9 用户J 2 0
10 用户K 5 0
11 用户K 5 0
12 用户K 7 0
13 用户K 12 0
更新VIP等于1
比如 id=5的这个人 下家的数量满足3个 然后更新vip=1
用一句sql能update更新? 这个应该属于递归...
就是说每个人都有上家...如果这个人下家满足3个人..然后更新VIP=1
update结果集
table_user
id user shangjiaid vip
5 用户E 5 1
2 用户B 3 1
update table_user set vip = 1 where id in (select * from (SELECT a.shangjiaid FROM
table_user as a GROUP BY a.shangjiaid having count(1) >= 3) as b)
感觉应该还有更优解吧。。
另外给个建议,LZ以后提问的时候最好能把建表语句和数据填充语句贴上来,这样会省很多时间。也许会有更多答案。
update table set vip=1 where id=(select shangjiaid from (select from table group by shangjiaid having count()>2)t ) 大概是这个思路,sql可能不对,你自己看看
这种复杂的语句你可以分开,这种复杂的一步完成的sql语句在我看来并不好,遇到数据量大的时候业务就会特别卡。
你可以先统计哪些id 的商家id下家数量大于3,在分别更新vip为1;实在不行也可以的加一个队列,这样对业务应该会好一点。