powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Удаление дубликатов строк из таблицы
2 сообщений из 2, страница 1 из 1
Удаление дубликатов строк из таблицы
    #39460246
fortress
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Имеется таблица (PostgreSQL 9.4):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE TABLE test
(
  tid serial NOT NULL,
  id integer
)
WITH (
  OIDS=FALSE
);
ALTER TABLE test
  OWNER TO postgres;

insert into test values (1,1),(1,2),(1,3)


Нужно удалить дубликаты по полю tid, оставив только одну, т.е. чтобы в таблице осталась только строка со значениями (tid=1, id=1).

Придумал запрос:
Код: sql
1.
2.
3.
delete from test t1
where
exists (select id from test t2 where t1.tid=t2.tid and t1.id<>t2.id) 


Но такой запрос удаляет все строки из такой таблицы.
В итоге был найден другой запрос, который делает то что нужно:
Код: sql
1.
2.
3.
4.
5.
delete from test
where id in (
select id
from (select id,row_number() over (partition by tid) as rnum from test) t
where t.rnum>1)


Вопрос вот в чем. Первый запрос я тестировал в БД Firebird (2.1) - там он удалял все строки кроме одной, то есть делал то что надо. А в PostgreSQL удалились почему-то все строки с одинаковым значением поля tid. Я понимаю что это разные СУБД, но в чем причина такого разного поведения одного запроса? Где можно подробнее узнать/помотреть/почитать про этот момент?
...
Рейтинг: 0 / 0
Удаление дубликатов строк из таблицы
    #39460261
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fortress,

Кажется это вчера был день пьяных школьников. И он уже закончился. Не?

Читайте здесь: 20512654
Так же поищите в любимом поисковике по словам: "sql удаление дубликатов"

Ваша проблема:
Первый запрос характерен именно для Interbase/Firebird. В этой БД результат подзапроса может зависеть от действий вызывающего запроса. Поэтому в другой БД этот запрос не пройдет.

Поэтому нужно тщательно изучать особенности своей рабочей БД. Четко понимать что является спецификой поведения, а что стандартом.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Удаление дубликатов строк из таблицы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]