0

I'm using xenforo, that has tables:

  • user: user_id, user_group_id
  • thread: thread_id, user_id, sticky

I need a query to change user_group_id from 15 to 14 if they dont have any stick thread (sticky=0 in thread).

Is this possible with a left join, and if so how?

Thanks.

4

3 回答 3

0
update user u
set u.user_group_id=14
where u.user_group_id=15 and
  (select sticky from thread where thread_id = u.user_id)=0;
于 2014-02-10T03:15:49.120 回答
0

你的意思是:

UPDATE user SET user_group_id=14 WHERE user_group_id=15 AND 
0 = (SELECT COUNT(*) FROM thread WHERE sticky=0 AND user_id=user.user_id)

这不使用左连接。必须使用 LEFT JOIN 吗?

于 2014-02-10T03:16:49.843 回答
0

这会做到的

update user set user_group_id = 14 
where user_group_id = 15 
and user_id in (select user_id from threads where sticky=0)

编辑:

在这种情况下,您可以在更新时加入两个表,而不是使用子查询,如下所示

update user u
inner join thread t on
    u.user_id = t.user_id and t.sticky = 0
set u.user_group_id = 14
where u.user_group_id = 15

在此处查看演示 sqlfiddle http://sqlfiddle.com/#!2/58b121/1

于 2014-02-10T03:25:36.700 回答