我想创建一个插入,但我想判断表的最后一个插入是否为空.如果它是null,我不想插入它.

我有一个名为USERS_ILL的表.

id | user_id | health_at | created_at

下面是我的INSERT语句:

INSERT INTO users_ill (user_id) VALUES ($1);', [user_id]);

但现在我还想判断Health_at是否为空.我如何使用Insert判断这一点?

我也可以写另一个查询,但我认为当它与insert和select一起工作时,这是不必要的.

推荐答案

假设最近的记录将是具有最大created_at值的记录,您可以使用INSERT INTO ... SELECT,如下所示:

INSERT INTO users_ill (user_id)
SELECT $1
WHERE NOT EXISTS (
    SELECT 1
    FROM (
        SELECT health_at
        FROM users_ill
        ORDER BY created_at DESC
        LIMIT 1
    ) t
    WHERE health_at IS NULL
)

内部的LIMIT子查询在users_ill表中查找最近的记录.然后,EXISTS逻辑断言来自该最新记录的health_at值为not NULL.然后,只有在您预期的条件下,插入才会继续.

Sql相关问答推荐

Microsoft Access UNION将长文本字段限制为255个字符

基于时间的SQL聚合

R中对Arrow duckdb工作流的SQL查询

retrofit AWS Athena中的JSON

如何在presto/SQL中使用两个数组列创建(分解)单独的行

BigQuery-当子查询不返回任何结果时,所有结果为零

对列进行排序后,基于两列删除重复行

MS Access问题查询中的自定义字段

PostgreSQL-按距离阈值挤压相邻行的性能

如何使用SQL生成数据的滚动3天总和

其中使用表名作为;行值;记录?

将SQL Server查询改进为;线程安全;

使用CTE在SNOWFLAKE中创建临时表

在特定条件下使用 LAG,确定要采用什么 LAG 值?

使用多个数据库调用重载 CQRS 模式

SQL Server中使用min()和max()从选定的特定值id表中删除不必要的时间

按公司和产品查询最近发票的平均价格的SQL查询

REGEXP_SUBSTR使用方法

SQL:如何从时间戳数据生成时间序列并计算不同事件类型的累计总和?

PostgreSQL 中的递归树查询