#sql #sql-server #tsql
#sql #sql-сервер #tsql
Вопрос:
У меня есть одна таблица, содержащая данные клиента, их основные адресные данные и данные рабочего адреса, их необходимо разделить на 2 таблицы клиенты и адреса.
У клиента есть столбцы «address1» и «address2», которые должны быть первичными ключами соответствующих адресов в таблице адресов, но адреса не могут иметь столбец для клиентских p_keys.
Мой вопрос: как я могу правильно получить p_keys новых адресов в таблице клиента?
Пример того, чего я хотел бы достичь:
insert into clients
(
_name,
_address1,
_address2
)
SELECT
t._name
select p_key from (insert into addresses values ( t.addressData1 ))
select p_key from (insert into addresses values ( t.addressData2 ))
FROM fulldata t
Не уверен, как это можно сделать, хотя я новичок в sql.
Ответ №1:
Что-то вроде этого:
INSERT INTO addresses
SELECT *
FROM
(
SELECT addressData1
FROM fulldata
UNION ALL
SELECT addressData2
FROM fulldata
) DS
EXCEPT
SELECT addressData -- or the name of the column in the table
FROM addresses
insert into clients
(
_name,
_address1,
_address2
)
SELECT
t._name
,A1.p_key
,A2.p_key
FROM fulldata t
INNER JOIN addresses A1
ON t.addressData1 = A1.addressData -- or the name of the column in the table
INNER JOIN addresses A2
ON t.addressData2 = A2.addressData -- or the name of the column in the table
Сначала вставьте адреса, затем присоедините таблицу к fulldata
единице.