mysql连接语句语法问题

qnzebej0  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(296)

我正在尝试使用3个表数据(join)更新1个表中的2列,这是它抛出语法错误的原因之一。当我执行2个set语句中的1个set语句时,它的工作正常。但是,如果我使用两个set语句,它的语法错误。(第6行和第7行)有人能纠正我的语句吗

UPDATE TIBENVINFO tei  
            INNER JOIN TIB_CROSSREF tcr 
                  ON (tei.ProductName = tcr.Env_Product_Name and tei.Version = tcr.Version ) 
            INNER JOIN ENDOFSUPPORTPRODUCTINFO esi 
                  ON (esi.ProductName = tcr.Support_Product_Name)            
           **SET tei.SupportEndDate = esi.EndOfSupportDate,
             SET tei.UpdateRequired = 'Yes'**
            Where (DATEDIFF(esi.EndOfSupportDate,CURDATE()) < 90) and tei.HostName = "XXXXXXXXX"

错误:
sql语法有错误;检查与您的mariadb服务器版本相对应的手册,以了解在第7行的“set tei.updaterequired=”yes“where(datediff(esi.endofsupportdate,curdat)”附近使用的正确语法

smdnsysy

smdnsysy1#

你只需要 set 一次,列之间用逗号分隔:

SET tei.SupportEndDate = esi.EndOfSupportDate, 
    tei.UpdateRequired = 'Yes'

我还建议将日期比较改写为:

where esi.EndOfSupportDate > curdate() - interval 90 day and
      tei.HostName = 'XXXXXXXXX'  -- note single quotes not double quotes

这不仅更容易写和读,而且更容易优化。

jxct1oxe

jxct1oxe2#

不能在更新查询中反复写入set关键字。其语法为:

UPDATE tablename SET column_name = value

因此,如果要更新表中的多个列,可以在列名中添加逗号,如下所示:

SET tei.SupportEndDate = esi.EndOfSupportDate, tei.UpdateRequired = 'Yes'

希望对你有用。。

相关问题