Предположим, что вы выполняете инструкцию DELETE для механизма SQL. как вы удалите две строки из таблицы, которые точно идентичны? Вам нужно что-то отличить друг от друга! Вы на самом деле не может удалить полностью повторяющиеся строки (все столбцы равны) при следующих ограничениях (как это предусмотрено для вас)
- без использования ROWID или ROWNUM
- Нет Временная таблица
- Нет процедурный код
Это может быть сделано, даже если одно из условий ослаблено.Вот решения с использованием по меньшей мере одного из трех условий
Предположим, таблица определена, как показано ниже
Создать таблицу t1 (
col1 vacrchar2 (100),
col2 число (5),
col3 номер (2)
); Идентификация
повторяющиеся строки:
Выберите col1, col2, col3
от t1
группы по col1, col2, col3
, имеющий счетчик (*)> 1
повторяющиеся строки может также можно идентифицировать, используя это: выберите c1, c2, c3, row_number() over (разделение на (c1, c2, c3) по c1, c2, c3) rn
от t1
ПРИМЕЧАНИЕ. Аналитическая функция row_number() не может использоваться в операторе DELETE, как предложено JohnFx, по крайней мере, в Oracle 10g.
- Решение с использованием ROWID
Удалить из t1, где row_id>
(выбрать мин (t1_inner.row_id) от t1 t1_innner
, где t1_inner.c1 = t1.c1 и t1_inner.c2 = t1.c2 и t1_inner.c3 = t1.c3))
- решения с использованием временной таблицы
создать таблицу t1_dups как (
// написать запрос здесь, чтобы найти повторяющиеся строки в Liste выше //
)
удалить из t1
где t1.c1, t1.c2, t1.c3 в (выбрать * из t1.dups)
вставки в t1 (
выберите c1, c2, c3 от t1_dups)
- Решение с использованием процедурного кода
Это будет использовать подход, аналогичный тому, где мы используем временную таблицу.
Ugh. Доверьтесь мне. Вы все равно не хотите эту работу. Вопрос, по которому они заставляют вас завязывать руки за спиной, как правило, предназначен для того, чтобы показать, насколько умный собеседник не тестирует кандидата. – JohnFx
Спасибо, JohnFx, за поддержку ... делает меня счастливее, я не преследовал эту работу. –
Последнее, что вам нужно, это босс, который не хочет решения, он хочет ИХ решение. Своя ошибка менеджера новичков и очень нарциссизм, чтобы попытаться нанять клоны себя. – JohnFx