Eu tenho 2 tabela no meu banco de dados.
Tabela 1
-------------------------------------------------------------------------
| name | family | phone | email | gender | phone2 | address | birthdate |
-------------------------------------------------------------------------
Mesa 2
-----------------------------------------
| gender | address | phone | birthdate |
-----------------------------------------
na tabela nº 1, o endereço das colunas e phone2 está vazio e os valores de sexo e data de nascimento das colunas são os mesmos da tabela nº 2.
Como posso ler dados da tabela 2 e atualizar o endereço e telefone2 na tabela 1 com valores das colunas de endereço e telefone da tabela 2 quando sexo e data de nascimento são iguais em cada linha?
por exemplo: esses são alguns dados da Tabela 1
-------------------------------------------------------------------------
| name | family | phone | email | gender | phone2 | address | birthdate |
-------------------------------------------------------------------------
| john | doe | 12345| t@t.com| Male | | | 1980-01-01|
-------------------------------------------------------------------------
| mike | clark | 65432| x@y.com| Male | | | 1990-01-01|
-------------------------------------------------------------------------
| Sara | King | 875465| a@b.com|Female| | | 1970-01-01|
-------------------------------------------------------------------------
e aqui estão alguns dados na tabela # 2
-----------------------------------------
| gender | address | phone | birthdate |
-----------------------------------------
| Male | 1704test|0457852|1980-01-01 |
-----------------------------------------
| Female | 1705abcs|0986532|1970-01-01 |
-----------------------------------------
| Male | 1602cyzd|0326589|1990-01-01 |
-----------------------------------------
Quero atualizar a tabela 1 com os dados da tabela 2, verificar o sexo e a data de nascimento e criar a tabela 1 como
-------------------------------------------------------------------------
| name | family | phone | email | gender | phone2 | address | birthdate |
-------------------------------------------------------------------------
| john | doe | 12345| t@t.com| Male |0457852 |1704test | 1980-01-01|
-------------------------------------------------------------------------
| mike | clark | 65432| x@y.com| Male |0326589 |1602cyzd| 1990-01-01|
-------------------------------------------------------------------------
| Sara | King | 875465| a@b.com|Female |0986532 |1705abcs| 1970-01-01|
-------------------------------------------------------------------------
Como posso fazer isso?
sql-server
t-sql
sql-server-2014
join
update
John Doe
fonte
fonte
UNIQUE
restriçãotable2 (gender, birthdate)
, você deve adicionar essa informação na pergunta.Respostas:
Existem algumas maneiras de alcançar os resultados desejados.
Métodos indeterministas
(no caso de muitas linhas na tabela 2 corresponderem a uma na tabela 1)
Ou uma forma um pouco mais concisa
Ou com um CTE
Métodos determinísticos
MERGE
lançaria um erro em vez de aceitar resultados não determinísticosOu você pode escolher um registro específico se houver mais de uma correspondência
Com
APPLY
.. Ou um CTE
fonte
tgt_address
etgt_phone
são aliases para colunas em#Table1
- de modo que é o destino da atualização.fonte