如何在MySQL中标记每个非重复行? (合并选择和更新声明)

时间:2011-08-12 02:38:55

标签: mysql select duplicates unique

我正在使用此查询来获取数据库中所有非重复的托管:

SELECT title, COUNT(title) as cnt
FROM my_table.books
GROUP BY title
HAVING cnt > 1
ORDER BY cnt;

我创建了一个no_duplicate类型的新列tinyint(1),其中我想将每一行标记为1,这是唯一的(上面查询的每个输出)。

是否可以使用上面的查询嵌套更新?还是有更优雅的方式?

2 个答案:

答案 0 :(得分:1)

这样做:

update books set
no_duplicate = 1;

update books set
no_duplicate = 0
where title in (select title from (
  SELECT title, COUNT(*) as cnt
  FROM books
  GROUP BY title
  HAVING COUNT(*) > 1) x);

为了提高效率,我分两步完成,因为它更可能没有重复(合理的假设),WHERE title IN列表会很小,因此很快。

答案 1 :(得分:0)

更新书籍 设置no_dublicate = 1
其中的标题(从书籍中选择标题按标题分组(*)< 2)