mysql - 用里面的选择查询解释插入查询
问题描述
我正在重构某人的代码,这样的查询到处都是,我不明白发生了什么。我不知道要搜索什么,并且“带有嵌套选择的 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 子句,它适用于什么查询?我假设第一个选择查询但不太确定。
解决方案
这将创建一个包含一行的表,如果某些条件到达,将插入该表,请参见下文
SELECT
? as hour,
? as uid,
? as lastupdate,
? as hash1hr
这将检查表中是否已经存在这样的行stats_users_hour
(相同pid
和lastupdate
)
WHERE NOT EXISTS (
SELECT lastupdate FROM stats_users_hour WHERE lastupdate = ? AND uid = ?
)
当这样的行存在时,现在将插入新行
ON DUPLICATE KEY UPDATE lastupdate = ?, hash1hr = ?
这将使用最新数据更新该lastupdate
行hash1hr
推荐阅读
- node.js - @tensorflow/tfjs-node:错误:无法加载 SavedModel:操作类型未在二进制运行中注册“NonMaxSuppressionV5”
- .net - 未在 ListView 控件的 ViewBase 的自定义实现中创建 ViewAutomationPeer
- asp.net-core - “HttpRequest”不包含“EnableRewind”的定义
- javascript - JavaScript Promise 中的隐式`resolve`
- c++ - GTest:处理分段错误
- reactjs - 在选择中反应选择设定值
- python - 通过计算 var1 的所有值的计数并除以 var1 的唯一值而不是 var2 的唯一值,创建一个新变量 var3
- pine-script - 第二天收盘价的 pine-script 代码
- javascript - 如何在dart中实现nodejs类似功能的buffer
- javascript - 在 XPath 中使用正则表达式?