首页 > 解决方案 > 用里面的选择查询解释插入查询

问题描述

我正在重构某人的代码,这样的查询到处都是,我不明白发生了什么。我不知道要搜索什么,并且“带有嵌套选择的 mysql 插入”不会产生任何有用的信息。

INSERT INTO stats_users_hour (
        hour,
        uid,
        lastupdate,
        hash1hr
        )
        SELECT * FROM (SELECT 
          ? as hour, 
          ? as uid, 
          ? as lastupdate, 
          ? as hash1hr) AS tmp
        WHERE NOT EXISTS (
        SELECT lastupdate FROM stats_users_hour WHERE lastupdate = ? AND uid = ?
        ) LIMIT 1
        ON DUPLICATE KEY UPDATE lastupdate = ?, hash1hr = ?

我什至不确定如何正确缩进。我假设第一个选择使用第二个选择产生的值,但是第二个选择从哪里获取它的数据?这只是一个“更新或创建”查询吗?第一个选择的结果是否用作插入查询的值?

如果这是重复的,我很抱歉。任何帮助表示赞赏。

编辑:还有 where 子句,它适用于什么查询?我假设第一个选择查询但不太确定。

标签: mysql

解决方案


这将创建一个包含一行的表,如果某些条件到达,将插入该表,请参见下文

   SELECT 
      ? as hour, 
      ? as uid, 
      ? as lastupdate, 
      ? as hash1hr

这将检查表中是否已经存在这样的行stats_users_hour (相同pidlastupdate

 WHERE NOT EXISTS (
    SELECT lastupdate FROM stats_users_hour WHERE lastupdate = ? AND uid = ?
    )

当这样的行存在时,现在将插入新行

ON DUPLICATE KEY UPDATE lastupdate = ?, hash1hr = ?

这将使用最新数据更新该lastupdatehash1hr


推荐阅读