mysql - MariaDB (MySQL) 中的条件插入

标签 mysql mariadb

我有两张 table 。第一个包含有关传感器的数据(组、名称、最新更新等)。第二个是所有传感器的读数。

我现在想检查传感器的最新更新是否是在不久之前,如果是,则在该传感器的读数表中插入一个空值。

我尝试了一些 IF 语句,但没有成功。我应该选择 INSERT 和“where IN()”吗?

最佳答案

你走在正确的道路上。它实际上是带有 WHERE 子句的 INSERT 因此,您需要做的是在读数表中为过去 X 天有更新的传感器创建一条记录(在下面的示例中为 10 天)

类似于:

insert into readings
select 1 as id, id as sens_id, null as info
from sensors
where datediff(now(),latest_update) > 10;

在我的示例中,我提供了一个 ID,但我假设它是 BD 中的自动增量整数...

然后,更新 UPDATE 字段...

update sensors set latest_update = now()
where datediff(now(),latest_update) > 10;

去吧,自己尝试一下...

https://www.db-fiddle.com/f/u1EWRpH7nbxHEjwBDUgwLh/0

更新:

https://www.db-fiddle.com/f/u1EWRpH7nbxHEjwBDUgwLh/1

如果latest_update已编入索引,我建议这样做:

where date_add(now(),INTERVAL -10 DAY) > latest_update;

从索引中受益。

“当您围绕索引列包装函数时,SQL Server 必须计算表中每一行的函数值。当您仅将索引列与标量值或函数结果进行比较时,SQL Server 可以使用该值来查找索引。”

不确定是否适用于 MySQL,因为我没有在本例中测试它,但可以肯定:)

https://www.sqlteam.com/articles/avoid-enclosing-indexed-columns-in-a-function-in-the-where-clause

关于mysql - MariaDB (MySQL) 中的条件插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54272221/

相关文章:

mysql sql优化:order by not use index

sql - 我该如何优化这个查询?

mysql - rake db :create not working for legacy rails app (2. 3.5) 使用 MySQL (5.5.28)

javascript - 未处理的拒绝错误 : WHERE parameter “number_phone” has invalid “undefined” value

mysql - MariaDB SELECT 仅针对 30 天内过期的帐户的所有记录

MySQL/MariaDB 事件优化数据库表

mysql - 在 linux 文件系统上索引文件的 Ruby 进程

python mysql 插入 float 精度

sql - 如何使用 jOOQ 创建 SELECT EXISTS (子查询)?

mysql - 通过在sql中对多个列进行分组来查找列中的最小值