Обновите оператор, используя предложение WHERE, которое содержит столбцы с нулевыми значениями

Я обновляю столбец в одной таблице, используя данные из другой таблицы.WHERE Предложение основано на нескольких столбцах, и некоторые из столбцов являются нулевыми. По моему мнению, это нули являются то, чтоthrowing off ваш стандартUPDATE TABLE SET X=Y WHERE A=B заявление.

Увидетьэто SQL Fiddle из двух таблиц, где я пытаюсь обновитьtable_one на основе данных изtable_two, Мой запрос в настоящее время выглядит так:

UPDATE table_one SET table_one.x = table_two.y 
FROM table_two
WHERE 
table_one.invoice_number = table_two.invoice_number AND
table_one.submitted_by = table_two.submitted_by AND
table_one.passport_number = table_two.passport_number AND
table_one.driving_license_number = table_two.driving_license_number AND
table_one.national_id_number = table_two.national_id_number AND
table_one.tax_pin_identification_number = table_two.tax_pin_identification_number AND
table_one.vat_number = table_two.vat_number AND
table_one.ggcg_number = table_two.ggcg_number AND
table_one.national_association_number = table_two.national_association_number

Сбой запроса для некоторых строк в этомtable_one.x не обновляется, если какой-либо из столбцов в любой таблицеnull, то есть он обновляется только тогда, когда во всех столбцах есть данные.

Этот вопрос связан с моим ранеездесь на ТАК где я получал различные значения из большого набора данных, используяDistinct On, Теперь я хочу заполнить большой набор данных значением из таблицы, имеющей уникальные поля.

ОБНОВИТЬ

Я использовал первый оператор обновления, предоставленный @binotenary. Для небольших столов это выполняется в одно мгновение. Пример содержит одну таблицу с 20 000 записей, и обновление было завершено примерно за 20 секунд. Но еще одна таблица с более чем 9 миллионами записей работает уже 20 часов! Смотрите ниже вывод дляEXPLAIN функция

Update on table_one  (cost=0.00..210634237338.87 rows=13615011125 width=1996)
  ->  Nested Loop  (cost=0.00..210634237338.87 rows=13615011125 width=1996)
    Join Filter: ((((my_update_statement_here))))
    ->  Seq Scan on table_one  (cost=0.00..610872.62 rows=9661262 width=1986)
    ->  Seq Scan on table_two  (cost=0.00..6051.98 rows=299998 width=148)

EXPLAIN ANALYZE вариант взял тоже навсегда, поэтому я его отменил.

Любые идеи о том, как сделать этот тип обновления быстрее? Даже если это означает использование другого оператора обновления или даже использование пользовательской функции, чтобы выполнить цикл и выполнить обновление.

Ответы на вопрос(3)

Ваш ответ на вопрос