У меня есть уникальный индекс (UQ_index1), созданный с использованием
CREATE UNIQUE INDEX UQ_index1 on product_table
(
column1,
column2
)
INCLUDE
(
column3
)
WITH (DATA_COMPRESSION=PAGE)
ON scheme_Product(column1)
@SQLPro Сообщение: «Повторяющееся значение ключа (val5, val6, val7)». будут ли эти значения иметь тот же порядок, что и col1, col2, col3? Я хотел просто использовать оператор select с WHERE col1= val5 AND col2 = val6, AND col3 = val7? но я не получаю такого результата для этого утверждения
Вы можете определить дубликаты, используя:
select p.*
from (select p.*,
count(*) over (partition by column1, column2) as cnt
from product_table p
) p
where cnt > 1
order by cnt desc, column1, column2;
Непонятно, что вы хотите сделать, чтобы избавиться от дубликатов. Если вы просто хотите удалить дубликаты, вы можете использовать delete
:
with todelete as (
select p.*,
row_number() over (partition by column1, column2 order by column3) as seqnum
from product_table p
)
delete from todelete
where seqnum > 1;
Однако у вас есть другие варианты:
простое добавление столбца3 выше будет работать, я думаю, чтобы получить комбинацию столбца1, столбца2, столбца3, я думаю, будет работать? Обновляя один из столбцов, я предполагаю, что вы имели в виду, что комбинация всех трех столбцов уникальна.
@РахулСингх. . . Да, это то, что я имею в виду под «обновлением».
Сообщение: «Дублированное значение ключа (val5, val6, val7)». будут ли эти значения иметь тот же порядок, что и col1, col2, col3? Я хотел просто использовать оператор select с WHERE col1= val5 AND col2 = val6, AND col3 = val7? но я не получаю такого результата для этого утверждения
Я думаю, что простой группы по запросу должно быть достаточно, чтобы вернуть дубликаты
SELECT column1, column2, column3
FROM product_table
GROUP BY column1, column2, column3
HAVING COUNT(*) > 1
Но я не уверен, что вы подразумеваете под дубликатами, поскольку ваш уникальный индекс не допускает дубликатов.
каким-то образом таблица перепуталась, и при копировании ее в другую резервную таблицу с теми же свойствами мы получаем, что не можем вставить повторяющуюся ошибку ключа
@Oliver Сообщение: «Повторяющееся значение ключа (val5, val6, val7)». будут ли эти значения иметь тот же порядок, что и col1, col2, col3? Я хотел просто использовать оператор select с WHERE col1= val5 AND col2 = val6, AND col3 = val7? но я не получаю такого результата для этого утверждения
Я не знаю, откуда приходит сообщение. Вы должны быть в состоянии сказать это по содержимому, и эти значения должны появиться в моем операторе выбора, если действительно все 3 столбца должны быть уникальными. В противном случае, если только первые 2 должны быть уникальными, удалите столбец 3 (дважды). Что я могу сказать, так это то, что если значения взяты из текстовых столбцов, они должны быть окружены '. Нравится WHERE col1= 'val5' AND col2 = 'val6', AND col3 = 'val7'
Остерегаться! INDEX(col2, Col1) INCLUDE(Col3) не будет иметь того же поведения, что и INDEX(col1, Col2) INCLUDE(Col3), потому что индекс BTree является своего рода вектором...