【发布时间】:2013-11-27 18:46:43
【问题描述】:
使用mysql 5.5,语句如下:
update foo left join bar on foo.id=bar.id set foo.col='val', bar.col='val';
即使没有 bar 也确实会更新 foo 行(并且 bar.col= 不会生成任何错误或警告)。但据我所知,这在 mysql 文档中并没有得到保证。
任何人都可以提供权威参考,无论是在 SQL 标准中还是来自 Oracle,说明这是故意的?
它在其他风格的 SQL,特别是 postgres 和 MariaDB 或其他版本的 mysql 中是否同样有效?
请注意,与上面不同的是,以下内容确实将左连接提升为内连接:
update foo left join bar on foo.id=bar.id set bar.col='val';
但这可能只是一种优化。
更新:澄清一下,我看到的行为就是我想要的行为;我只是担心在我看来它没有证件。如果我想要一个内部连接,我会使用一个。
【问题讨论】:
-
您无法在给出答案后更改问题,从而使合法答案看起来偏离主题。我回滚了你上次的编辑。
-
到目前为止没有人回答我的实际问题,尽管您已经向我澄清它根本不适用于 PostgreSQL,我对此表示赞赏。 IMO 不提及 postgres 就足以证明您已经给出了答案;我把它放回去(并赞成你的回答)。
-
嗯,cmets 用来澄清。一般来说,以一种会使给定答案无效的方式改变问题的性质是行不通的。
-
来自dev.mysql.com/doc/refman/5.0/en/update.html 页面的
For the multiple-table syntax, UPDATE updates rows in each table named in table_references that satisfy the conditions.不保证为您提供此功能吗? -
@AgRizzo:差不多,但不完全
标签: mysql sql-update left-join mariadb