【问题标题】:"You have an error in your SQL syntax; check the manual that corresponds to your MySQL"“您的 SQL 语法有错误;请查看与您的 MySQL 对应的手册”
【发布时间】:2016-06-29 14:52:50
【问题描述】:

在这里失去理智,试图弄清楚这一点。这是 SQL:

Update `ScheduledShifts` ss 
LEFT JOIN `Shifts` s ON ss.`ShiftID` == s.`ShiftID` 
SET ss.`IsWeekend` 
WHERE (s.`WeekendDays` & (1 << (DAYOFWEEK(ss.`OriginalShiftDate`)-1))) <> 0;

以及完整的错误:

1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 '== s.ShiftID SET ss.IsWeekend WHERE (s.WeekendDays & (1

【问题讨论】:

标签: mysql phpmyadmin


【解决方案1】:
Update ScheduledShifts ss LEFT JOIN Shifts s ON ss.ShiftID = s.ShiftID SET ss.IsWeekend WHERE (s.WeekendDays & (1 << (DAYOFWEEK(ss.OriginalShiftDate)-1))) <> 0;

简答:查询中的单等号,而不是双等号!

我以前从未在单个查询中使用左连接执行过更新,所以我不知道这本身是否是一个问题,但相信你的双等号是问题所在。

在脚本语言中,您的 == 是有效的,但在 sql 请求中,它是非法的。

【讨论】:

  • 谢谢,成功了。不敢相信我在一个角色上浪费了这么多时间。啊! UPDATE ScheduledShifts ss LEFT JOIN Shifts s ON ss.ShiftID = s.ShiftID SET ss.IsWeekend = 1 WHERE (s.WeekendDays &amp; (1 &lt;&lt; (DAYOFWEEK(ss.OriginalShiftDate)-1))) &lt;&gt; 0;
  • 教育我:UPDATE ScheduledShifts ss LEFT JOIN Shifts s 在这个上下文中什么是 ss 和 s?表还是表中的列?哪个表?我从来没有见过两个值跟随一个 UPDATE 或一个 LEFT JOIN 所以你让我很好奇。
  • @fiprojects ssstable aliases
  • 谢谢 Dezza - 我会对此进行更多研究。
【解决方案2】:

错误本身就是在回答。使用= 而不是==

UPDATE ScheduledShifts ss 
LEFT JOIN Shifts s ON ss.ShiftID = s.ShiftID 
SET ss.IsWeekend 
WHERE (s.WeekendDays & (1 << (DAYOFWEEK(ss.OriginalShiftDate)-1))) <> 0;

更新:

正如 @Dezza 所说,您的查询不完整,因为您没有将 ss.IsWeekend 列设置为任何内容。

【讨论】:

  • 谢谢,但仍然给出:> #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的 'WHERE (s.WeekendDays & (1 0' 附近使用正确的语法
  • SET ss.IsWeekend 到什么?
  • 为什么编辑中的逻辑从按位和&amp;变为逻辑和AND
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
  • 2013-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多