我有以下查询:
update scores as c
set c.score = c.score + 0.5
where c.user_id in (select u.acc_id from users as u, tweets as t
where u.acc_id=t.author_original_id and t.tweet_content LIKE '%music%')
如您所见,我想在每次选择查询中出现acc_id时将分数提高0.5。
如何强制WHERE ... IN子句返回重复项?我不能在这里使用UNION(据我所知)。 之前已经问过类似的问题(here和there)。仍然需要使用Union的建议解决方案在这里不起作用。谢谢!
答案 0 :(得分:3)
in
无法返回重复的行。为此,您需要使用join
。但是,在更新中,您不会多次更新同一记录 - 只有一个更新生效。而是计算您想要的记录并相应地调整分数:
update scores s join
(select u.acc_id, count(*) as cnt
from users u join
tweets t
on u.acc_id = t.author_original_id and
t.tweet_content LIKE '%music%'
) ut
on ut.acc_id = s.user_id
set s.score = s.score + 0.5 * cnt;
答案 1 :(得分:0)
您可以使用“distinct”,这样可以避免重复。
update scores as c
set c.score = c.score + 0.5
where c.user_id in (select distinct u.acc_id from users as u, tweets as t
where u.acc_id=t.author_original_id and t.tweet_content LIKE '%music%')