MySQL IN()有重复的行

时间:2014-06-03 11:05:43

标签: mysql where where-in

我有以下查询:

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(据我所知)。 之前已经问过类似的问题(herethere)。仍然需要使用Union的建议解决方案在这里不起作用。谢谢!

2 个答案:

答案 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%')