2016-09-22 78 views
0

我有两个表:项目和temp_projects($ table在下面的代码中)。我正在使用以下MySQL查询来尝试使用项目中的数据更新temp_projects上的字段。MySQL错误1064当使用CASE试图更新两个表之间的字段

下面是该查询:

$this->q("UPDATE $table, projects 
    CASE 
     WHEN $table.$number_field != projects.number 
      THEN set $table.$id_field = projects.id WHERE $table.old_proj_num = projects.number 
     WHEN $table.$number_field = projects.number 
      THEN SET $table.$id_field = projects.id WHERE $table.$number_field = projects.number 
    END"); 

我得到的错误是:

MySQL error 1064: 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 'CASE 
        WHEN temp_projects.number != projects.number 
          THEN set temp_proj' at line 2 
When executing: 
UPDATE temp_projects, projects 
      CASE 
        WHEN temp_projects.number != projects.number 
          THEN set temp_projects.project_id = projects.id WHERE temp_projects.old_proj_num = projects.number 
        WHEN temp_projects.number = projects.number 
          THEN SET temp_projects.project_id = projects.id WHERE temp_projects.number = projects.number 
      END 

我遇到的问题是在错误消息“行然后设置temp_proj”第2行

再经过它应该阅读然后设置temp_projects.project_id = projects.id WHERE temp_projects.number = projects.number

我想为什么它会切断查询之后再设置temp_proj

我不熟悉使用CASE命令所以任何指针将赞赏弄清楚。

谢谢。

回答

0

让您的查询如下:

> UPDATE Students 
    SET NAME = CASE 
>       WHEN NAME = 'ABC' THEN 'MNO' 
>       WHEN NAME = 'DEF' THEN 'JKL' 
>       WHEN NAME = 'EFG' THEN 'GHI' 
>       ELSE NAME 
>  END WHERE LASTNAME IN ('ABC', 'DEF', 'EFG') 
+0

请在下面查看我更新的问题。 – JoeRDG

0

喜欢这个?

$this->q("UPDATE $table, projects 
     set $table.$id_field = 
     CASE 
      WHEN $table.$number_field != projects.number 
       THEN projects.id WHERE $table.old_proj_num = projects.number 
      WHEN $table.$number_field = projects.number 
       THEN projects.id WHERE $table.$number_field = projects.number 
     END"); 

我的WHERE子句是不同的两个WHEN语句,我需要寻找的数据取决于如果$表。$ number_field和projects.number是否相等不同点。