Как выбрать несколько столбцов, только один из которых отличается? (ORACLE SQL) - PullRequest
3 голосов
/ 27 сентября 2011

Я хочу иметь возможность сделать это:

INSERT INTO TABLE_1(<LIST OF COLUMNS>)
SELECT <LIST OF ROWS> FROM (SELECT DISTINCT <OTHER COLUMNS> FROM TABLE_2);

Как я могу это сделать? Я получаю сообщение об ошибке при попытке сделать это сейчас.

Обратите внимание, что <LIST OF COLUMNS> одинаково в обоих случаях, которые я использую, а также не то, что поля в <OTHER ROWS> могут, но не обязательно существуют в <LIST_OF COLUMNS>.

1 Ответ

3 голосов
/ 27 сентября 2011

Хорошо, здесь есть небольшой философский трактат ...

«Различный» означает «отклонить дубликаты».И чтобы обнаружить дублированные строки, вы сначала сравниваете их на равенство.

Если вы просто сравниваете строки на все столбцы , все в порядке: две строки либо равны, либо нет,нет третьей возможности.Таким образом, вы всегда знаете, следует ли отклонить строку как дубликат или нет.

Однако, если вы попытаетесь сравнить строки путем сравнения подмножества их столбцов , вы столкнетесь с проблемой: строкикоторые равны при сравнении по подмножеству их столбцов, могут не совпадать при сравнении по всем столбцам.Так они дубликаты или нет?

  • Если вы считаете их дубликатами и отклоняете одну из строк, вы также отклоняете значения, которые могут не существовать в другой строке.Вы фактически теряете данные (не говоря уже о том, что какие данные, которые вы теряете, являются случайными, поэтому даже хранящиеся вами данные по сути бесполезны).
  • Если вы не считаете их дубликатами, товы на самом деле не выделяете их в подмножестве столбцов, что противоречит тому, что вы пытались сделать в первую очередь.

Таким образом, можно сделать отдельные строки в подмножестве столбцов:

  • , если вы не сохраните другие столбцы,
  • или «объединяя» значения в других столбцах, подвергая их агрегирующим функциям, таким как MAX, COUNT, SUM и т. д.

По этой причине GROUP BY должно охватывать всех неагрегированных столбцов.DISTINCT - это просто GROUP BY для всех столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...