MariaDB(MySQL)中的条件INSERT

时间:2019-01-19 23:22:35

标签: mysql mariadb

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

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

我尝试了一些IF语句,但是没有运气。我应该去INSERT和“ where IN()”吗?

1 个答案:

答案 0 :(得分:1)

您走对了路。它实际上是带有WHERE子句的INSERT 因此,您需要在Readings表中为过去X天(在我的示例中为10天)具有UPDATE的传感器创建一条记录。

类似:

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

如果为last_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