2016-09-22 79 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是否相等不同點。