我可以通过内部联接更新表吗?

时间:2013-11-16 22:23:05

标签: mysql sql

我试图通过内部联接更新表格?我想我的代码中遗漏了一些东西;我做得对吗?

UPDATE a    
  SET product_name = "value2"   
  from tbl1 a
  INNER JOIN tbl2 b
    ON a.sid = s.id
   Having b.product_name="value1"

@Gordon:以下查询可以与您的查询相同:

  UPDATE tbl1 a 
  INNER JOIN tbl2 b
  ON a.sid = s.id 
  SET product_name = 'value2' 
  having b.product_name = 'value1';

如果您需要更多说明,请与我们联系。

谢谢

1 个答案:

答案 0 :(得分:3)

MySQL的正确语法是:

UPDATE tbl1 a INNER JOIN
       tbl2 b
       ON a.sid = s.id AND b.product_name = 'value1'
  SET product_name = 'value2' ;

编辑(回应评论):

正式地,只有在有聚合时才允许使用having子句。并且,您无法以任何SQL方言更新聚合查询。

MySQL扩展了having子句,因此当没有where子句时,它的行为很像group by子句。实际上,having子句已扩展,因此它可以使用select语句中定义的列别名(不适用于update查询)。

使用having子句的查询在MySQL中实际上并不起作用,因为扩展名适用于select, but not the更新. Replace it with a statement or move the condition to the on`子句。