将外键从一列转换为另一列中的值

时间:2018-12-05 22:20:47

标签: mysql sql database

我有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。与StatusDataKeyIdInstrumentStatusDataKey相同。

我希望在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 :(得分: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;