[英]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.