【发布时间】:2019-02-19 12:29:55
【问题描述】:
我正在尝试使用以下语法进行简单的更新查询:
UPDATE cl
SET cl_s="active_"
WHERE id in (
SELECT distinct
c.id
from
cl c,
ac a,
cl_ac ac
where
c.id=ac.cl_id
and
a.id=ac.ac_id
and
c.cl_s="someval"
and
a.ac_no !=""
)
;
我得到的错误是:错误代码:1093。您不能在 FROM 子句中指定要更新的目标表
我已经阅读了提到 MySQL 无法像这样运行查询的帖子。我想知道一种将此类查询重组为有效结构的无缝方式。解决方案似乎是使用连接,但我似乎无法理解这个概念。
伪代码会很有帮助,有助于理解。像
(Main query)
where var in (subquery generating var list)
到
(main query) inner join (subquery generating var list) on var ???
【问题讨论】:
-
第一步:从隐式连接转向显式连接
-
您应该使用显式连接,也应该使用命名标准。
cl.cl_s是什么? -
ac.ac_no... 您将不断遇到使用此类名称难以解决的问题! -
@dustytrash 这些愚蠢名字的原因是我不想在公共论坛上扔掉真实的名字。 Barmar,我猜你甚至没有读过我的问题。我确实提到我已经浏览了这些示例。我什至没有要求询问 - 理解这个概念而不仅仅是让菜肴轻松上桌。我想用 MySQL 了解这种结构的原因。
-
@SushantVasishta 在这种情况下,我不建议使用您的 SIN/SSN 或其他私人信息作为表/列名!
标签: mysql