Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个看似合法的MySQL查询会出现错误?_Mysql_Sql - Fatal编程技术网

为什么这个看似合法的MySQL查询会出现错误?

为什么这个看似合法的MySQL查询会出现错误?,mysql,sql,Mysql,Sql,首先,我有一个名为goals的表 然后还有另一个名为goal_cycles的表 任务:我需要以以下方式更新memberId=4且cycle_status=active的所有目标的目标_周期 更新循环状态=被动 设置开始日期=开始日期+3天 设置结束日期=结束日期+3天 因此,我编写了以下MySQL查询 update goal_cycles gc set gc.cycle_status = 'passive', set gc.start_date = DATE_ADD(gc.s

首先,我有一个名为goals的表

然后还有另一个名为goal_cycles的表

任务:我需要以以下方式更新memberId=4且cycle_status=active的所有目标的目标_周期

更新循环状态=被动 设置开始日期=开始日期+3天 设置结束日期=结束日期+3天 因此,我编写了以下MySQL查询

update goal_cycles gc 
    set gc.cycle_status = 'passive', 
    set gc.start_date = DATE_ADD(gc.start_date, INTERVAL 3 DAY), 
    set gc.end_date = DATE_ADD(gc.end_date, INTERVAL 3 DAY) 
where gc.goal_id in (select g.id from goals g where g.member_id = 4)
and gc.cycle_status = 'active'
在我看来,这似乎是一个合法的mysql查询,但我得到以下错误消息:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'set gc.start_date = DATE_ADD(gc.start_date, INTERVAL 3 DAY),
set gc.end_date = ' at line 3
请我需要MySQL专家指出这个查询到底有什么问题,以及如何根据任务要求正确地修复它。

您重复了设置。它应仅在查询中出现一次:

update table foo
    set field1 = value1,
        field2 = value2,
        field3 = value3,
        etc...

因此,不,这不是有效的语法。

请记住,MySQL文档通常非常具体地描述语句的结构。如果你知道去哪里看,应该很容易辨别。在编写查询时,让文档始终在一个选项卡中打开是不丢脸的。“这是你第一次把事情做好的方法。”塔德曼谢谢你的提醒。我要强调,在回家的路上,下次千万不要盲目地匆忙翻阅纪录片。谢谢你的建议。干杯哦我的多么可怕的疏忽。。。那时我的大脑一定在冬眠。。。我甚至检查了MySQL文档,因为我太盲目而没有注意到我可怕的语法缺陷。谢谢@Marc-B
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'set gc.start_date = DATE_ADD(gc.start_date, INTERVAL 3 DAY),
set gc.end_date = ' at line 3
update table foo
    set field1 = value1,
        field2 = value2,
        field3 = value3,
        etc...