如果数据存在,则更新其他插入,使用子查询或等的mysql [重复]

Posted

技术标签:

【中文标题】如果数据存在,则更新其他插入,使用子查询或等的mysql [重复]【英文标题】:if data exists then update else insert, mysql using subquery or etc [duplicate] 【发布时间】:2013-08-02 01:35:34 【问题描述】: 'process' 是一种预处理语句的方法 'QId' & 'UnqId' 是子外键(只是一个索引)

我想使用子查询等实现mysql一行语句(包括3个查询)

$get = $call->process("SELECT UnqId FROM table1
                     WHERE QId = ? AND UnqId = ?", 
                     array($_SESSION['Q'], $_SESSION['U']));
if($get) //if table exists

$call->process("UPDATE table1 SET col3 = ?, col4 = UTC_TIMESTAMP() 
              WHERE QId = ? AND UnqId = ?", 
                  array('OK', $_SESSION['Q'], $_SESSION['U']));

else

$call->process("INSERT INTO table1 VALUES (?, ?, ?, UTC_TIMESTAMP(),
               NULL, NULL, NULL, NULL)", 
                  array($_SESSION['Q'], $_SESSION['U'], 'OK'));

【问题讨论】:

如果你使用 mysql,你可以看看INSERT ON DUPLICATE KEY UPDATE 语法,这是一件很漂亮的事情!但请注意,如果您转移数据库,这只是 mysql @Dale 但我怎样才能对三个查询进行一行查询?包括 SELECT 语句.. 我不确定你是否可以,你会先运行你的选择然后根据我之前评论中的链接文档创建一个单行插入/更新 @Dale 在 sql 的子查询中有 'EXISTS' 的东西,但我不知道如何使用它.. 这就是 google 对我朋友的意义,祝你好运 【参考方案1】:

查看ON DUPLICATE KEY UPDATE 语法以在一个查询中完成。并尝试下次搜索,例如。 “mysql 更新重复”。

【讨论】:

【参考方案2】:

您可以使用使用ON DUPLICATE KEY UPDATE的查询

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;

【讨论】:

但是如何将'select'语句与其他查询结合起来 你的选择只是为了检查记录是否存在吗? 是的...我应该使用 'EXISTS' 的 sql 子查询的东西 所以在这种情况下您不需要使用 select,ON DUPLICATE KEY UPDATE 会为您处理这些问题 当然你必须用这两个字段(QId 和 UnqId)创建唯一索引。

以上是关于如果数据存在,则更新其他插入,使用子查询或等的mysql [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如果不存在则插入 Spark SQL 中的其他更新

如果不存在Mysql,则插入[重复]

SQL 查询 - 如果存在则更新,否则插入

Mysql插入数据:不存在则插入,存在则跳过或更新

如果 id 存在则更新,否则插入 (ODBC)

SQL Server 2014 - MainTable 和 TempTable - 如果不存在则插入其他更新