PostgreSQL记录重新排序问题

时间:2012-01-08 17:32:22

标签: postgresql

我需要使用时间戳执行记录重新排序,但是当查询运行时没有匹配时,我得到一个NOT-NULL约束违规。

以下是查询 -

UPDATE ORDR
SET    QUE_NUM = ORDR2.SORT_ORDER
FROM
   (
    SELECT ORDR_ID, ROW_NUMBER() OVER (ORDER BY CRTD_TS) AS SORT_ORDER
    FROM   ORDR
    WHERE  STUS_CD IN ('01','02','03','04','05','06')
   ) ORDR2
WHERE ORDR2.ORDR_ID = ORDR.ORDR_ID

我在下面得到例外 - 错误:“que_num”列中的空值违反非空约束

1 个答案:

答案 0 :(得分:1)

查询按原样运行。我刚刚测试过。考虑一下这个演示:

CREATE TEMP TABLE ordr (
   ordr_id int
  ,que_num int NOT NULL
  ,stus_cd text
  ,crtd_ts int
  );
INSERT INTO ORDR VALUES
 (1, 1, '01', 6)
,(2, 2, '02', 5)
,(3, 3, '03', 4)
,(4, 4, '04', 3)
,(5, 5, '05', 1)
,(6, 6, '06', 2);

UPDATE ordr
SET    que_num = ordr2.sort_order
FROM  (
    SELECT ordr_id, row_number() OVER (ORDER BY crtd_ts) AS sort_order
    FROM   ordr
    WHERE  stus_cd IN ('07','08') -- no match
   ) ordr2
WHERE ordr2.ordr_id = ordr.ordr_id

返回:

  

查询成功返回:0行受影响,31毫秒执行时间。