我有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
中条目的ID。与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
。
答案 0 :(得分:1)
如果我正确地遵循此逻辑,则只需要将表join
在一起并设置适当的键:
update InstrumentOperation io join
InstrumentStatus ins
on io.InstrumentStatusId = ins.id join
InstrumentStatusDataKey isd
on isd.name = ins.name
set StatusDataKeyId = isd.id;