在条件更新sql上插入

问题描述 投票:-1回答:3

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

我试过这段代码

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'附近使用正确的语法

sql mariadb
3个回答
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


0
投票

在您的查询中,IF之后缺少“那么”

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

请添加“那么”并检查

另外在末尾添加“End If”


-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
  }
© www.soinside.com 2019 - 2024. All rights reserved.