2012-01-08 134 views
0

我需要使用時間戳執行記錄重新排序,但是當查詢運行時沒有匹配時,我得到NOT-NULL約束違規。PostgreSQL記錄重新排序問題

下面是查詢 -

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」違反了非空約束

+0

是'ORDR_ID'主鍵? – 2012-01-08 17:48:12

回答

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 

返回:

Query returned successfully: 0 rows affected, 31 ms execution time.

+0

謝謝歐文。我發現問題是別的。謝謝! – user558122 2012-01-14 03:34:51