2012-01-08 16 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 

私は以下の例外を取得 - ERROR:コラム "que_num" にNULL値は非NULL制約

+0

'主キーをORDR_ID'ていますか? –

答えて

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

Erwinに感謝します。私は問題が何か他のものだと考えました。ありがとう! – user558122

関連する問題