mysql - 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' 附近使用正确的语法
解决方案
您只需要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
这不仅更易于编写和阅读,而且更易于优化。
推荐阅读
- java - 从套接字创建 BufferedReader 时,如果连接失败,readLine() == null 会不会?
- asp.net-mvc - 发布我的 ASP.NET Core MVC 应用程序时,Entity Framework Migrations 选项显示错误
- puppeteer - 在专门调用的类之后不单击元素
- android - Android RecyclerView 和 ListView - 父视图滚动不足,ListView 隐藏
- docker - 如何在本地安装引用为 github.com 地址的 Golang 包
- c++ - 跨线程读取无符号整数时,c++ 位是否自动切换?
- sql-server - 执行/竞争的存储过程顺序
- google-apps-script - 将“从电子表格创建多项选择表单问题”脚本转换为“创建复选框等” 脚本 - 错误?
- go - xsd-makepkg 包没有通过 go get 命令正确加载
- git - 如何临时删除未暂存的更改,然后再恢复它们