我正在使用此查询来获取数据库中所有非重复的托管:
SELECT title, COUNT(title) as cnt
FROM my_table.books
GROUP BY title
HAVING cnt > 1
ORDER BY cnt;
我创建了一个no_duplicate
类型的新列tinyint(1)
,其中我想将每一行标记为1
,这是唯一的(上面查询的每个输出)。
是否可以使用上面的查询嵌套更新?还是有更优雅的方式?
答案 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)