У меня есть 2 таблицы в моей базе данных.
Таблица 1
-------------------------------------------------------------------------
| name | family | phone | email | gender | phone2 | address | birthdate |
-------------------------------------------------------------------------
Таблица 2
-----------------------------------------
| gender | address | phone | birthdate |
-----------------------------------------
в столбцах таблицы № 1 адрес и phone2 не заполнены, а значения столбцов пола и дня рождения такие же, как в таблице № 2.
Как я могу прочитать данные из таблицы № 2 и обновить адрес и номер телефона 2 в таблице № 1 значениями из столбца адреса и телефона таблицы № 2, если пол и дата рождения одинаковы в каждой строке?
например: это некоторые данные в таблице № 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|
-------------------------------------------------------------------------
и вот некоторые данные в таблице № 2
-----------------------------------------
| gender | address | phone | birthdate |
-----------------------------------------
| Male | 1704test|0457852|1980-01-01 |
-----------------------------------------
| Female | 1705abcs|0986532|1970-01-01 |
-----------------------------------------
| Male | 1602cyzd|0326589|1990-01-01 |
-----------------------------------------
Я хочу обновить таблицу № 1 данными из таблицы № 2, проверить пол и дату рождения и сделать таблицу № 1 похожей
-------------------------------------------------------------------------
| 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|
-------------------------------------------------------------------------
Как я могу это сделать?
sql-server
t-sql
sql-server-2014
join
update
Джон Доу
источник
источник
UNIQUE
ограничениеtable2 (gender, birthdate)
, вы должны добавить эту информацию в вопрос.Ответы:
Есть немало способов достичь желаемых результатов.
Недетерминированные методы
(если много строк в таблице 2 совпадают с одной строкой в таблице 1)
Или немного более краткая форма
Или с CTE
Детерминированные методы
MERGE
будет выдавать ошибку, а не принимать недетерминированные результатыИли вы можете выбрать конкретную запись, если есть более одного совпадения
С
APPLY
.. или CTE
источник
tgt_address
иtgt_phone
являются псевдонимами для столбцов в#Table1
- так что это цель для обновления.источник