Использование Insert Into Select при преобразовании значений в третью таблицу - PullRequest
0 голосов
/ 18 сентября 2018

Я не знаю, как просто сформулировать мой вопрос, но вот сценарий.У меня есть две таблицы с данными следующим образом:

CertStatus Table:

CertStatus_KEY  CertStatus_ID
1               ACTIVE
2               EXPIRED

CertImport Table:

Status
ACTIVE
EXPIRED
EXPIRED
ACTIVE
EXPIRED
ACTIVE

Что мне нужно сделать, это взять CertImport.Statusв столбце преобразуйте все эти состояния в CertStatus_KEY, соответствующий CertStatus_ID, а затем скопируйте всю эту информацию в третью таблицу с двумя столбцами, чтобы данные в конечном итоге выглядели следующим образом.

Таблица сертификации:

Certification_KEY   CertStatus_KEY
1                   1
2                   2
3                   2
4                   1
5                   2
6                   1

Я пытаюсь использовать оператор Insert Into Select, но получаю сообщение об ошибке, согласно которому подзапрос возвратил более 1 значения.Вот что я получил:

INSERT INTO Certification (CertStatus_KEY)
SELECT (
    SELECT CertStatus_KEY from CertStatus where CertStatus_ID in (
        SELECT Status from CertImport)
    )

Упрощенно, цель состоит в том, чтобы преобразовать CertImport.Status в значение CertStatus.CertStatus_KEY, соответствующее соответствующему CertStatus.CertStatus_ID, и затем вставить это значение в Сертификацию.CertStatus_KEY.

Спасибо.

1 Ответ

0 голосов
/ 18 сентября 2018
Insert into Certification (CertStatus_Key)
select cs.Certstatus_Key
from CertStatus cs
inner join CertImport ci on cs.CertStatus_Id = ci.Status;

Демонстрация DBFiddle

Примечание. На сервере SQL не гарантируется, в каком порядке результаты вернутся из выбора, если не указано условие order by (или вхотя бы есть кластерный индекс).Для такого небольшого набора данных вы получите результат, как вы и просили, но для большего набора нет никакой гарантии.На самом деле, дизайн кажется плохим с самого начала, у CertImport должен быть столбец идентификаторов?

...