在发布我的问题之前,我想告诉大家,这不是this或that的重复,因为我不想解决具体问题,而是我渴望理解一个人。阅读docs,我可以看到关于update
命令中子查询的两个非常有趣的异常示例:
UPDATE t1 SET column2 = (SELECT MAX(column1) FROM t1);
错误是
错误1093(ER_UPDATE_TABLE_USED)SQLSTATE = HY000消息=“你 不能在FROM子句“
中为更新指定目标表'x'
2
SELECT * FROM t1 WHERE s1 IN (SELECT s2 FROM t2 ORDER BY s1 LIMIT 1)
错误是
ERROR 1235(ER_NOT_SUPPORTED_YET)SQLSTATE = 42000 Message =“This MySQL的版本还不支持'LIMIT& IN / ALL / ANY / SOME 子查询'“
查看第一个示例,我可以告诉column2
更新t1
可能会或可能不会更改column1
值,例如因为触发器或列是相同的。但是,我想知道为什么MySQL会抛出错误而不是正常评估子查询,或者至少确定在命令运行时是否可能由update
更改子查询的结果?至于第二个例子,我真的不明白为什么MySQL不支持这种语法。我认为这些是MySQL错误,我想知道是否有任何时间表将被修复。