Я пытался удалить дубликаты из таблицы, но мне нужен более общий способ сделать это. Существует множество способов сделать это, если таблица имеет уникальный идентификатор, например идентификатор строки. Но в остальном это кажется очень сложным и разным для разных баз данных.
Я даже изучил CTE (Common Table Expressions), чтобы сделать то же самое, но кажется, что базы данных не позволяют использовать CTE, за которым следует предложение DELETE
(по крайней мере, то, что я видел с MySQL и Snowflake).
Но в PostgreSQL, похоже, есть способ добиться этого, не обязательно имея какой-либо уникальный идентификатор. Это достигается за счет использования ctid
, системный столбец в PostgreSQL. Мне любопытно, есть ли аналогичная функциональность, такая как ctid
, для других баз данных, особенно для MySQL и Snowflake, которые меня сейчас интересуют.
@SimeonPilgrim Спасибо за предложение, но я до сих пор делал что-то подобное и хотел исключить процесс создания какой-либо дополнительной таблицы. Кажется, что без уникального идентификатора не так много контроля.
Да, вам нужен план борьбы с дубликатами.
Вам нужно никогда не вставлять дубликаты или иметь идентификатор в таблице, чтобы упорядочивать и сопоставлять для удаления.
В MySQL есть такой внутренний 6-байтовый номер строки (GEN_CLUST_INDEX), когда в таблице нет уникальных индексов, но он абсолютно недоступен. dev.mysql.com/doc/refman/8.0/en/innodb-index-types.html
Понял @SimeonPilgrim
Спасибо, все еще повышает ценность моих знаний @Akina
I am curious if there is a similar functionality like
ctid
for other databases especially MySQL and Snowflake is what I am interested in currently.
В Снежинке нет CTID
.
нет не CTID