Как полчить не уникальные записи таблицы objs по полю id, что бы потом их удалить, к примеру?
Пробую select id from objs group by id having count(*) >1, но ничего не выводит, хотя там такие записи есть.
Про n-1, кстати да, желательно сохранить по одному значению. Может дело в null? Типа поля есть, айдишники дублируютья, но само поле пустое, вот его и не выводит ?
select id, count(*) from objs group by id order by 2 desc
с учетом отсутствия первичного ключа - удалять часть окажется не очень тривиальной задачей, но можно попробовать положиться на псевдоуникальность. Или вводил бы что-нибудь автоинкрементное.
d-stream: смотри, тут такое дело, объясню ситуацию, мб будет понятней задача. Есть такая хрень для мониторинга как dude. Там пишеться база, и когда она тановитья больше какого-то размера, то прога начинает дуреть. А в базу, по сути, пишет кучу ненужной чуши.Удалил не нужное и хочу сделать vacuum базы, но оно ругаеться на не уникальные значения, вот и хочу их убрать. Может вообще по ситуации что-то подскажешь? Потому что просто почистить базу, копирнуть данные в новую и переименовать не получаетья, потому что dude тогда её просто не понимает. Вот такие вот вареники)
de_iiah_teji9_iiace: да собственно сама ситуация непринципиальна... разве что поматюкать организаторов стрельбы в ногу, если они реализовали таблицу без primary key...
А общая канва удаления лишних дублей будет выглядеть так:
1. ищем дубли (group by ... having count(*)>1)
2. по дублям получаем уникальные идентификаторы конкретных записей для удалени
3. исключив из п.2 по одной записи (top 1 order by например по дате)
убедись, что таблица действительно не имеет первичного ключа. Если это так - создай его, например автоинкрементный дальше будет попроще с п.1.2.3
d-stream: так то да, но эта падла, когда хочешь поискать дубли той командой что ты предлагаешь, вообще ничего не пишет, типа их и нету. Хотя, когда смотришь эти самые айдишники, то там чуть ли не все продублированны. Может попробовать зайти с другой стороны? Когда хочешь залить базу в прогу, то оно что-то там не хочет. А если сделать новую базу самим dudo'ом, а потом туда дозаписать что надо из старой? Оно же автоматически делает нужные махинации с базой когда её создает, а моя же почищенная, вот там чего-то и не хватает и она не заливаеться. Как тебе такой вариант? Когда буду дописывать в новую рабочую базу данные со старой, битой, то оно же автоматически обрежет то что не надо?
.mode insert objs
.output objs.sql
select * from objs;
потом захожу на новую базу и делаю .read objs.sql
По идее оно должно все лишнее убрать, а записать только то что надо. Сейчас жду результата, а то оно долго, когда закончу, отпишу, что получилось)