SQL UPDATE A列='XYZ'其中选择(要更新的多行比较不同的表)
下面SQL给出-811或作业被取消SQL UPDATE A列='XYZ'其中选择(要更新的多行比较不同的表),sql,db2,sql-update,Sql,Db2,Sql Update,下面SQL给出-811或作业被取消 UPDATE RATES A SET A.D_PROC_RATE_END = '1234' WHERE EXISTS ( SELECT A.C_PROCEDURE, A.
UPDATE RATES A
SET A.D_PROC_RATE_END = '1234'
WHERE EXISTS
(
SELECT A.C_PROCEDURE,
A.C_SPECIALTY,
A.C_PROV_TYPE,
A.C_PROCEDURE_MOD,
A.N_PROC_RATE
FROM PROC B
LEFT OUTER JOIN RATES A
ON
A.C_SPECIALTY = '181'
AND A.C_PROV_TYPE = B.C_PROV_TYPE
AND A.C_PROCEDURE = B.C_PROCEDURE
AND (A.C_PROCEDURE_MOD = B.C_PROCEDURE_MOD
OR A.C_PROCEDURE_MOD IS NULL)
AND (A.D_PROC_RATE_END IS NULL
OR A.D_PROC_RATE_END = '12/31/9999')
AND A.N_PROC_RATE = B.N_PROC_RATE
ORDER BY A.C_PROCEDURE)
此sql不会更新包含以下条件的所有记录吗?我们无法回答它是否会更新每一行。我们不知道数据。如果EXISTS谓词每次返回一个“true”值,那么它将更新每一行;否则就不会了 首先运行此查询:
SELECT A.C_PROCEDURE,
A.C_SPECIALTY,
A.C_PROV_TYPE,
A.C_PROCEDURE_MOD,
A.N_PROC_RATE
FROM RATES A
WHERE EXISTS
(
SELECT A.C_PROCEDURE,
A.C_SPECIALTY,
A.C_PROV_TYPE,
A.C_PROCEDURE_MOD,
A.N_PROC_RATE
FROM PROC B
LEFT OUTER JOIN RATES A
ON
A.C_SPECIALTY = '181'
AND A.C_PROV_TYPE = B.C_PROV_TYPE
AND A.C_PROCEDURE = B.C_PROCEDURE
AND (A.C_PROCEDURE_MOD = B.C_PROCEDURE_MOD
OR A.C_PROCEDURE_MOD IS NULL)
AND (A.D_PROC_RATE_END IS NULL
OR A.D_PROC_RATE_END = '12/31/9999')
AND A.N_PROC_RATE = B.N_PROC_RATE
ORDER BY A.C_PROCEDURE)
返回的每一行都将被更新。我几乎总是在做任何非琐碎的更新之前运行测试选择
您可以在将测试选择查询更改为wherenotesists后运行该查询,以查看哪些不会更新。请不要使用所有大写字母!这被认为是对人大喊大叫,这是粗鲁和不受欢迎的-请修改你的帖子!请问是哪个DB2平台?您没有查找SQLCODE吗?它正在抱怨得到多行。。。这不应该是WHERE EXISTS的问题,因为它查找任何行,而不仅仅是一行。这真的是你的疑问吗?在内部和外部查询中也使用了相同的表别名——虽然这样做有效,但很难分辨哪些列在哪里。如果您试图比较来自内部和外部查询的列,它将忽略外部表引用。对不起,我对此表示歉意,在大型机中使用了大写,您知道文本中的DB2字符串是大写敏感的:Clockwork Muse谢谢。。实际上,这个查询更新了表中的每一行。现在真是一团糟。