【问题标题】:Update sentence with subquery on MySQL在 MySQL 上使用子查询更新句子
【发布时间】:2021-04-20 12:41:46
【问题描述】:

我有下面这句话,返回错误

where 子句中的未知列目标。ID_TARGET

我找不到任何解决方案。你们能帮忙吗? 建议使用子查询提供的值(0 或 1)更新每一行的“sw_automatic”

update bt_pry_targets targets
set targets.sw_automatic = (
(
SELECT (CASE WHEN Task.ID_TP_TASKS_GROUPS = 694 THEN '0' ELSE '1' END) AS TYPE_TASK, 
                    Task.ID_TASK FROM bt_tasks AS Task
                    INNER JOIN bt_pry_cmp_workflows AS BtCmpWorkflows ON (Task.ID_PRY_CMP_WORKFLOW = BtCmpWorkflows.ID_PRY_CMP_WORKFLOW)
                    INNER JOIN bt_pry_components AS PryComponent ON (PryComponent.ID_PRY_COMPONENT = BtCmpWorkflows.ID_PRY_COMPONENT )
                    INNER JOIN bt_components AS Component ON (PryComponent.ID_COMPONENT = Component.ID_COMPONENT)
                    INNER JOIN bt_pry_targets AS PryTarget ON (PryComponent.ID_TARGET = PryTarget.ID_TARGET)
                    INNER JOIN bt_flows AS Flows ON (Flows.ID_FLOW = Task.ID_FLOW) 
                    WHERE Flows.SW_END_DEPENDENCE = 1
                    AND PryTarget.ID_TARGET = targets.ID_TARGET
                    GROUP BY Task.ID_TASK) )
where targets.sw_automatic is null;

【问题讨论】:

  • 。 .你的代码不起作用。我建议你问一个描述你想要完成的问题的问题;提供样本数据和期望的结果。简化问题,因为您可能只需要 2 或 3 个表格就可以解决问题。那么有人帮助你是可行的。
  • 我们看不到您的架构,因此我们不知道 target.ID_TARGET 是否真的存在,如果您拼写错误或其他问题。
  • 我简化了查询。我想要实现的是,使用子查询提供的值更新表 bt_pry_targets 的每一行。 ID_TARGET 是表的PK
  • 您的子查询选择了两列,TYPE_TASKID_TASKSET 将失败。 ID_TARGET 是否存在于 bt_pry_targets 表中?与其使用子查询,不如使用标准的UPDATE 语法重写此查询可能更容易(查询引擎也更有效)。

标签: mysql sql select sql-update subquery


【解决方案1】:

在你的子查询中,targets.ID_TARGET 列不可见

所以你可以尝试使用你的子查询作为更新的连接表

    update bt_pry_targets targets
    inner join  (
    SELECT (CASE WHEN Task.ID_TP_TASKS_GROUPS = 694 THEN '0' ELSE '1' END) AS TYPE_TASK, 
                        Task.ID_TASK FROM bt_tasks AS Task
                        INNER JOIN bt_pry_cmp_workflows AS BtCmpWorkflows ON (Task.ID_PRY_CMP_WORKFLOW = BtCmpWorkflows.ID_PRY_CMP_WORKFLOW)
                        INNER JOIN bt_pry_components AS PryComponent ON (PryComponent.ID_PRY_COMPONENT = BtCmpWorkflows.ID_PRY_COMPONENT )
                        INNER JOIN bt_components AS Component ON (PryComponent.ID_COMPONENT = Component.ID_COMPONENT)
                        INNER JOIN bt_pry_targets AS PryTarget ON (PryComponent.ID_TARGET = PryTarget.ID_TARGET)
                        INNER JOIN bt_flows AS Flows ON (Flows.ID_FLOW = Task.ID_FLOW) 
                        WHERE Flows.SW_END_DEPENDENCE = 1
                        AND PryTarget.ID_TARGET = targets.ID_TARGET
                        GROUP BY Task.ID_TASK
    ) t on t.PryTarget = targets.ID_TARGET 
        AND targets.sw_automatic is null
    set targets.sw_automatic = t.TYPE_TASK

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多