在条件更新sql上插入

时间:2017-12-20 09:16:00

标签: sql mariadb

我正在尝试在满足条件时更新表,如果不满足则只是插入记录。

我试过这段代码

IF EXISTS (SELECT * FROM table.person WHERE record_id='SomeValue')
    UPDATE table.person 
    SET some_text='new_some_text', some_other_text='some_other_text' 
    WHERE record_id='old_record_id'
ELSE
    INSERT INTO table.person (record_id, person_id, some_text, some_other_text) 
    VALUES ('new_record_id', 'new_person_id', 'new_some_text', 'new_some_other_text')

但这只会给我一个错误。我得到的错误是一般语法错误。

错误回复:

  

错误代码:1064。您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以便在'UPDATE table.person SET some_text ='new_some_text',some_other_text ='some_o'第2行附近使用正确的语法

3 个答案:

答案 0 :(得分:2)

嗯,从这看起来,这是一个典型的UPSERT(插入或更新)问题。

参考:https://mariadb.com/kb/en/library/insert-on-duplicate-key-update/

根据您的示例,record_id很可能是您的主键。

所以你的代码可以简单地成为这个。

INSERT INTO table.person (record_id, person_id, some_text, some_other_text) 
VALUES ('new_record_id', 'new_person_id', 'new_some_text', 'new_some_other_text')
ON DUPLICATE KEY UPDATE
some_text='new_some_text', some_other_text='some_other_text';

SQLFiddle链接:http://sqlfiddle.com/#!9/9e8c7d7/1/0

答案 1 :(得分:0)

在您的查询中,“那么”在IF

之后丢失
IF EXISTS (SELECT * FROM table.person WHERE record_id='SomeValue') **THEN**

请添加“那样”并检查

同时在最后添加“结束如果”

答案 2 :(得分:-1)

我只是使用num_rows检查已发布的id中存在的数据。如果num_rows大于零,则用该id更新数据,否则插入数据。

  $sql = "SELECT * FROM table WHERE id= '1'";
  $result = $conn->query($sql);
  if ($result->num_rows > 0) {
       // ENTER UPDATE QUERY
  }
  else{
      // ENTER INSERT QUERY
  }