Как пометить каждую не повторяющуюся строку в MySQL?(Объединить выбор и обновить заявление) - PullRequest
0 голосов
/ 12 августа 2011

Я использую этот запрос, чтобы получить все не повторяющиеся записи в базе данных:

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 ]

1 голос
/ 12 августа 2011

Это сделает это:

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 будет небольшим и, следовательно, быстрым.

0 голосов
/ 12 августа 2011

обновление книг
set no_dublicate = 1
где название в (выберите название из группы книг по названию, имеющему количество (*) <2) </p>

...