2017-01-13 2 views
0

У меня есть две таблицы, скажем, табличные книги и авторы таблиц.Обновление таблицы в oracle из другой таблицы с дублирующимися записями

Таблица книга имеет 4 поля, BookID, Название, Автор, Издательство

авторы Таблицы имеет 5 поля AuthorID, Название, Автор, Издательство, Цена

Я хочу, чтобы обновить книгу, чтобы иметь поле цен от авторы. Нет ни одного уникального ключа, поэтому критерии состоят в том, чтобы сопоставить Title или Author или Publisher, а затем добавить эту цену в книги. В моем случае у авторов много повторяющихся значений в заголовке, авторе или издателе, поэтому я получаю ошибки обновления из-за дубликатов. Итак, в основном, как в оракуле я могу обновлять книги с этими критериями, и в случае дубликатов просто выберите любую запись, не имеет значения, что и поместить в нее? На других языках есть верхняя команда, которую вы можете использовать, чтобы делать такую ​​вещь, но похоже, что Oracle этого недостаточно.

Я пробовал различные операции слияния и обновления самостоятельно без везения. Что-то вроде:

UPDATE books n 
    set n.price = (
    select t.price from authors t where 
    n.title= t.title or 
    n.author = t.author or 
    n.publisher = t.publisher) 

Но это утверждение не проверяет наличие дубликатов и остановить их таким образом, не так я пропускаю этот ключ.

+0

Это требование не имеет смысла. Если книга в таблице BOOKS соответствует строке в таблице AUTHORS издателем, укажите * в качестве цены этой книги * цену за ЛЮБУЮ книгу (какую-то случайную), когда-либо опубликованную этим издателем? Зачем вам когда-нибудь делать что-то подобное? – mathguy

+0

Я не делаю таблицы, я просто делаю то, что они просят. Я согласен, что это глупо. – DanH

+0

@mathguy Я знаю ... иногда я чувствую себя помощником, отвечая на вопросы о том, как делать плохие вещи. –

ответ

2

Простой способ:

UPDATE books n 
    set n.price = (
    select t.price from authors t where 
    (n.title= t.title or 
    n.author = t.author or 
    n.publisher = t.publisher) 
    and rownum = 1) 
+0

Это работало как прелесть. Я googled это, и ваш метод в основном был работой вокруг из-за отсутствия верха, так что имеет смысл. Благодарю. – DanH

Смежные вопросы