首页 > 解决方案 > MySQL join 语句语法问题

问题描述

我正在尝试使用 3 个表 data(join) 更新 1 个表中的 2 个列,它是如何引发语法错误的。当我使用 2 个“SET”语句中的 1 个“SET”执行时,它工作正常。但是,如果我使用 2 个 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' 附近使用正确的语法

标签: mysqlsqljoininner-join

解决方案


您只需要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

这不仅更易于编写和阅读,而且更易于优化。


推荐阅读