У меня есть 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
.