我正在尝试在MySQL 5.0中进行以下格式的更新:
update mytable.myfield t
set f = 'blah'
where t.id in (select v.id from myview v where ...);
MySQL告诉我:
ErrorNr. 1443
The definition of table 'v' prevents operation UPDATE on table 't'.
MySQL文档列出了这个错误,但是(像往常一样)不说它意味着什么。任何人都可以为我阐明这一点吗?我只引用子查询中的视图,我只引用主查询中的表,我不知道为什么这些会阻止更新。我在谷歌找到的唯一一件事就是与触发器相关的MySQL bug数据库中的一个错误,但是(AFAIK)我的数据库中没有触发器。
答案 0 :(得分:12)
我认为视图 myview 必须基于表 mytable ,因此当它更改 myfield 时,它会失去对视图中的内容因此导致非法更新。
我建议查看myview的定义,以便您可以编写查询而无需引用它。然后你就可以解决它。
或者,将id列表转储到临时表中,并将其用于子查询。
罗布