Atualizar instrução usando uma cláusula WHERE que contém colunas com valores nulos
Estou atualizando uma coluna em uma tabela usando dados de outra tabela. oWHERE
A cláusula é baseada em várias colunas e algumas delas são nulas. Do meu pensamento, esses nulos são o que sãothrowing off
seu padrãoUPDATE TABLE SET X=Y WHERE A=B
declaração.
Vejoeste violino SQL das duas tabelas em que estou tentando atualizartable_one
com base em dados detable_two
. Atualmente, minha consulta é assim:
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
A consulta falha para algumas linhas nessetable_one.x
não está sendo atualizado quando qualquer uma das colunas em qualquer tabela énull
. ou seja, ele só é atualizado quando todas as colunas têm alguns dados.
Esta questão está relacionada à minha anterioraqui no SO onde eu estava obtendo valores distintos de um grande conjunto de dados usandoDistinct On
. O que eu quero agora é preencher o grande conjunto de dados com um valor da tabela que possui campos exclusivos.
ATUALIZAR
Usei a primeira instrução de atualização fornecida pelo @binotenary. Para mesas pequenas, é executado rapidamente. Exemplo é uma tabela com 20.000 registros e a atualização foi concluída em 20 segundos. Mas outra tabela com mais de 9 milhões de registros está em execução há 20 horas! Veja abaixo a saída paraEXPLAIN
função
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)
oEXPLAIN ANALYZE
opção demorou também para sempre, então eu a cancelei.
Alguma idéia de como tornar esse tipo de atualização mais rápida? Mesmo que isso signifique usar uma instrução de atualização diferente ou até mesmo usar uma função personalizada para percorrer e fazer a atualização.