переводить внешние ключи из одного столбца в значения в другом столбце - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть 3 таблицы

InstrumentOperation

   InstrumentStatusId    StatusDataKeyId
         1                       0
         2                       0 
         3                       0
         4                       0
         5                       0    

InstrumentStatus

        Id       Name
         1      ACTIVE
         2     INACTIVE
         3     MAINTENANCE
         4     SERVICE  
         5     BROKEN

InstrumentStatusDataKey

        Id       Name
         1     MAINTENANCE
         2     SERVICE  
         3     BROKEN

InstrumentStatusId в InstrumentOperation ссылается на идентификатор записи в InstrumentStatus.То же самое с StatusDataKeyId и InstrumentStatusDataKey.

Я хочу, чтобы столбец StatusDataKeyId в таблице InstrumentOperation был заполнен Id записи в InstrumentStatusDataKey, которая правильно соответствует Id записи в InstrumentStatus с соответствующим именем, если оно существует, в противном случае оставьте 0.Например, ответ будет:

InstrumentOperation

   InstrumentStatusId    StatusDataKeyId
         1                       0
         2                       0 
         3                       1
         4                       2
         5                       3    

Запрос, который я создал, работает, только если все записи в InstrumentStatusId 1кроме одной строки ...

UPDATE InstrumentOperation SET StatusDataKeyId = (
    SELECT
        InstrumentStatusDataKey.Id
    FROM (SELECT * FROM InstrumentStatusDataKey) AS InstrumentStatusDataKey
        JOIN InstrumentStatus ON InstrumentStatus.Name = InstrumentStatusDataKey.Name
        JOIN (SELECT * FROM InstrumentOperation) AS InstrumentOperation ON InstrumentOperation.InstrumentStatusID = InstrumentStatus.Id
) WHERE InstrumentOperation.InstrumentStatusId != (SELECT Id FROM InstrumentStatus WHERE InstrumentStatus.Name = "ACTIVE");

Я получаю ошибку Subquery returns more than 1 row.

1 Ответ

0 голосов
/ 06 декабря 2018

Если я правильно следую этой логике, вы просто хотите join объединить таблицы и установить соответствующий ключ:

update InstrumentOperation io join
       InstrumentStatus ins
       on io.InstrumentStatusId = ins.id join
       InstrumentStatusDataKey isd
       on isd.name = ins.name
    set StatusDataKeyId = isd.id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...