簡體   English   中英

如何更新與同一表的其他記錄匹配的表字段

[英]How to Update a table field matching with another records of same table

如何更新與同一表的另一個記錄匹配的表字段。

UPDATE XXXRLES
    SET BIZCAT05 = 'S'
    WHERE ( SELECT A.* FROM XXXRLES A, XXXRLES B
                    WHERE
                        A.BIZFLD = B.BIZFLD
                        AND A.BIZOBJ = B.BIZOBJ
                        AND A.BIZRUL = B.BIZRUL
        );

當且僅當以下三個字段的2個記錄具有相同的值時,才需要用表XXXRLES的'S'更新字段BIZCAT05:

BIZFLD 
BIZOBJ
BIZRUL

如何進行查詢?

在注釋中提到ROWID之后,我假設您的RDBMS是Oracle。

UPDATE A SET
    BIZCAT05 = 'S'
FROM XXXRLES A
JOIN XXXRLES B ON
    A.BIZFLD = B.BIZFLD
    AND A.BIZOBJ = B.BIZOBJ
    AND A.BIZRUL = B.BIZRUL
    AND A.ROWID <> B.ROWID

或使用exists (對我來說看起來更清晰):

UPDATE A SET
    BIZCAT05 = 'S'
FROM XXXRLES A
WHERE EXISTS (SELECT 1 
    FROM XXXRLES B
    WHERE A.BIZFLD = B.BIZFLD
    AND A.BIZOBJ = B.BIZOBJ
    AND A.BIZRUL = B.BIZRUL
    AND A.ROWID <> B.ROWID
)

評論后添加

我對DB2不熟悉,但是您可以嘗試:

UPDATE XXXRLES A SET
    BIZCAT05 = 'S'
WHERE EXISTS (SELECT 1 
    FROM XXXRLES B
    WHERE A.BIZFLD = B.BIZFLD
    AND A.BIZOBJ = B.BIZOBJ
    AND A.BIZRUL = B.BIZRUL
    AND A.ROWID <> B.ROWID
)

您可以使用RID()行標識符內置函數來標識唯一行。 UPDATE查詢可以編寫如下:

UPDATE XXXRLES A 
SET BIZCAT05 = 'S'
WHERE EXISTS (SELECT 1 
              FROM XXXRLES B
              WHERE A.BIZFLD = B.BIZFLD
                AND A.BIZOBJ = B.BIZOBJ
                AND A.BIZRUL = B.BIZRUL
                AND RID(A) <> RID(B)
              )

請在此IBM DB2信息中心中找到有關RID()函數的更多信息。 http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=%2Fcom.ibm.db2z10.doc.sqlref%2Fsrc%2Ftpc%2Fdb2z_bif_rid.htm

不確定,那是您正確理解了,請嘗試

UPDATE XXXRLES SET BIZCAT05 = 'S' WHERE XXXRLES.ID in
 ( SELECT A.ID FROM XXXRLES A,        XXXRLES B
   WHERE A.BIZFLD = B.BIZFLD AND A.BIZOBJ = B.BIZOBJ AND A.BIZRUL = B.BIZRUL); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM