Eu tenho um banco de dados com account numbers
e card numbers
. Eu os associo a um arquivo a update
qualquer número de cartão e ao número da conta, para que eu esteja trabalhando apenas com os números da conta.
Criei uma visualização vinculando a tabela ao banco de dados da conta / cartão para retornar o Table ID
número da conta e o respectivo, e agora preciso atualizar os registros em que o ID corresponde ao número da conta.
Esta é a Sales_Import
tabela, na qual o account number
campo precisa ser atualizado:
LeadID AccountNumber
147 5807811235
150 5807811326
185 7006100100007267039
E esta é a RetrieveAccountNumber
tabela, da qual preciso atualizar:
LeadID AccountNumber
147 7006100100007266957
150 7006100100007267039
Eu tentei o abaixo, mas sem sorte até agora:
UPDATE [Sales_Lead].[dbo].[Sales_Import]
SET [AccountNumber] = (SELECT RetrieveAccountNumber.AccountNumber
FROM RetrieveAccountNumber
WHERE [Sales_Lead].[dbo].[Sales_Import]. LeadID =
RetrieveAccountNumber.LeadID)
Ele atualiza os números de cartão para números de conta, mas os números de conta são substituídos por NULL
fonte
SI.AccountNumber
para oAccountNumber
contrário, falhará.UPDATE Sales_Import, RetrieveAccountNumber SET Sales_Import.AccountNumber = RetrieveAccountNumber.AccountNumber where Sales_Import.LeadID = RetrieveAccountNumber.LeadID;
. Ligeiramente off topic, mas pode ser útilA maneira simples de copiar o conteúdo de uma tabela para outra é a seguinte:
Você também pode adicionar a condição para obter os dados específicos copiados.
fonte
Para SQL Server 2008 + O uso,
MERGE
em vez daUPDATE ... FROM
sintaxe proprietária, tem algum apelo.Além de ser SQL padrão e, portanto, mais portátil, também gera um erro no caso de haver várias linhas unidas no lado da origem (e, portanto, vários valores diferentes possíveis para usar na atualização), em vez de ter o resultado final indeterminado .
Infelizmente, a escolha de qual usar pode não se resumir apenas ao estilo preferido. A implementação
MERGE
no SQL Server foi afetada por vários bugs. Aaron Bertrand compilou uma lista dos relatados aqui .fonte
MERGE
.Resposta genérica para futuros desenvolvedores.
servidor SQL
Oracle (e SQL Server)
MySQL
fonte
update t1...
em vez deupdate Table1...
)Para o PostgreSQL:
fonte
Parece que você está usando o MSSQL, então, se bem me lembro, é feito assim:
fonte
Eu tive o mesmo problema ao
foo.new
ser definido comonull
para linhasfoo
que não tinham chave correspondentebar
. Eu fiz algo parecido com isto no Oracle:fonte
Para o MySql que funciona bem:
fonte
Aqui está o que funcionou para mim no SQL Server:
fonte
Obrigado pelas respostas. Eu encontrei uma solução tho.
fonte
Caso as tabelas estejam em bancos de dados diferentes. (MSSQL)
fonte
Use o seguinte bloco de consulta para atualizar a Tabela1 com a Tabela2 com base no ID:
Essa é a maneira mais fácil de resolver esse problema.
fonte
MS Sql
Oracle 11g
fonte
atualizar dentro da mesma tabela:
fonte
O SQL abaixo sugerido por alguém NÃO funciona no SQL Server. Essa sintaxe me lembra minha turma da velha escola:
Todas as outras consultas que usam
NOT IN
ouNOT EXISTS
não são recomendadas. Os NULLs aparecem porque o OP compara um conjunto de dados inteiro com um subconjunto menor e, é claro, haverá um problema de correspondência. Isso deve ser corrigido escrevendo o SQL apropriado com oJOIN
problema correto, em vez de desviar usandoNOT IN
. Você pode encontrar outros problemas usandoNOT IN
ouNOT EXISTS
neste caso.Meu voto na primeira, que é a maneira convencional de atualizar uma tabela com base em outra tabela, ingressando no SQL Server. Como eu disse, você não pode usar duas tabelas na mesma
UPDATE
instrução no SQL Server, a menos que se junte a elas primeiro.fonte
trabalha com postgresql
fonte
Eu pensei que este é um exemplo simples, alguém pode ficar mais fácil,
fonte
Oracle 11g
fonte
Isso permitirá que você atualize uma tabela com base no valor da coluna não encontrado em outra tabela.
Isso atualizará uma tabela com base no valor da coluna sendo encontrado nas duas tabelas.
fonte
tente isto:
fonte
Eu gostaria de adicionar uma coisa extra.
Não atualize um valor com o mesmo valor, pois gera log extra e sobrecarga desnecessária. Veja o exemplo abaixo - ele fará a atualização apenas em 2 registros, apesar de vincular em 3.
fonte
Se as respostas acima não funcionarem para você, tente isso
fonte