Как удалить дубликаты данных в таблице (Postgres) - PullRequest
0 голосов
/ 15 апреля 2019

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

SELECT
    fruit,
    COUNT( fruit )
FROM
    basket
GROUP BY
    fruit
HAVING
    COUNT( fruit )> 1
ORDER BY
    fruit;

чтобы найти их, купить Мне нужно определить, что значение каждого столбца равно, что означает tableA.* = tableA.* (кроме id, id - первичный ключ с автоинкрементом)

и я попробовал это:

SELECT
    *,
    COUNT( * )
FROM
    myTable
GROUP BY
    *
HAVING
    COUNT( * )> 1
ORDER BY
    id;

но там написано, что я не могу использовать GROUP BY *, так как я могу найти и удалить дублированные данные (нужно, чтобы значение каждого столбца было равным, кроме идентификатора)?

Ответы [ 3 ]

0 голосов
/ 15 апреля 2019

Вам нужно попробовать что-то похожее, чтобы быть ниже запроса. Вы применяете PARTITION BY для столбцов, отличных от Id (поскольку оно увеличивает уникальное значение). PARTITION BY следует применять к столбцам, для которых вы хотите проверить дубликаты. Также см. Row_Number в Postgres & Общее табличное выражение в Postgres

WITH DuplicateTableRows AS
(
SELECT Id, Row_Number() OVER (PARTITION BY col1, col2... ORDER BY Id)
FROM 
Table1
)
DELETE FROM Table1
WHERE Id IN (SELECT Id FROM Table1 WHERE row_number > 1)
0 голосов
/ 15 апреля 2019

Вы можете сделать это, используя JSON:

select (to_jsonb(b) - 'id')
from basket b
group by 1
having count(*) > 1;

Результат в формате JSON. К сожалению, чтобы извлечь значения обратно в запись, вам нужно перечислить столбцы по отдельности.

0 голосов
/ 15 апреля 2019

с использованием

SELECT * DISTINCT

DISTINCT удалить дублированный результат

...