sql - Postgres : UPDATE multiple rows WHERE columnName has int in given range

标签 sql postgresql

我想执行一个具有如下表的查询:

Order_no.   Order_string    Order_Int   Order_status
ABE001       ABE              1                0
ABE002       ABE              2                0
ABE003       ABE              3                0
ABE004       ABE              4                0
ABE005       ABE              5                0
ABE006       ABE              6                0
ABE007       ABE              7                0
ABE008       ABE              8                0
ABE009       ABE              9                0
ABE010       ABE              10               0

我想通过以下方式查询数据库:

1> 我收到了一系列示例的请求:order_no: ABE003 - ABE007

2>首先我要检查range中提到的所有order_no是否存在。

3> 其次,我需要检查是否存在 order_status 必须为 0。

4> 如果条件 2 和 3 满足则 UPDATE order_status 为 1。

这个怎么查询?

最佳答案

也许它并不完美,我现在无法测试,但我会这样解决:

 UPDATE table
    SET Order_Status =
    CASE
     WHEN EXISTS(SELECT Order_no FROM Table WHERE Order_No BETWEEN "x" AND "y" AND OrderStatus=0) THEN 1
    ELSE  0
    END

-- 根据要求编辑 我重复一遍我无法测试查询是否正确但检查并尝试理解背后的逻辑并检查 postgres documentation .

/*Checking if exists*/
    declare @PackageExists int
    declare @Package_1 nvarchar(45)
    declare @Package_2 nvarchar(45)

    SET @PackageExists = 
    CASE WHEN EXISTS(select * from table where Order_no BETWEEN @Pck_1 And @Pck_2 and Order_Status=0) THEN 1 
    ELSE 0

/*Update table*/
UPDATE table
SET Order_status = 
CASE WHEN @PackageExists=1 THEN 1 ELSE 0
END

关于sql - Postgres : UPDATE multiple rows WHERE columnName has int in given range,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47568633/

相关文章:

sql - 将nvarchar值…转换为数据类型int时转换失败

sql - Snowflake 无法将变量值 "{TIMESTAMP VALUE}"转换为 TIMESTAMP_NTZ

mysql - 在 MySQL/PostgreSQL 中查找落在纬度/经度组合内且以度为单位的 N 边距的多边形

c# - 如何实现历史版本控制?

mysql - 如何找到从事完全相同项目的 worker 数量

sql - 如何用非相关子查询替换相关子查询?

mysql - 有适合 Node.js 的 DAL 或 DAL/ORM 吗?

sql - 如何在条件下使用 jsonb_array_length ?

database - 最近的(几何)点作为外键

sql - 在 PgAdmin 的 Postgresql 中使用反向 for 循环反转数字