以下查询适用于SQL sErver。但是在DB2中它没有给出结果:
Error is SQLCODE = -199, ERROR: ILLEGAL USE OF KEYWORD FROM.
查询:
UPDATE
Sales_Import
SET
Sales_Import.AccountNumber = RAN.AccountNumber
FROM
Sales_Import SI
INNER JOIN
RetrieveAccountNumber RAN
ON
SI.LeadID = RAN.LeadID
有人可以通过b / w DB2和SQL查询来澄清差异。
答案 0 :(得分:6)
DB2确实支持UPDATE语句中的连接,而不是您认为的方式 - DB2遵循SQL ANSI标准:
UPDATE
Sales_Import SI
SET
Sales_Import.AccountNumber = (
SELECT
RAN.AccountNumber
FROM
RetrieveAccountNumber RAN
WHERE
SI.LeadID = RAN.LeadID
)
以上假设LeadID
唯一标识RetrieveAccountNumber
中的记录,否则您将收到错误,因为子查询将返回多行。
修改强>
要解决以下评论,如果找不到RetrieveAccountNumber
中的匹配记录,Sales_Import.AccountNumber
将设置为空。如果这是不合需要的,可以使用COALESCE()
来指定默认值。
答案 1 :(得分:5)
我很确定(虽然我暂时没有使用DB2)DB2仍然不支持更新语句中的连接,因此您需要使用MERGE;
像这样的东西(因为我没有DB2可用,因此可以稍微关闭);
MERGE INTO Sales_Import si
USING (SELECT AccountNumber, LeadID FROM RetrieveAccountNumber) ra
ON (si.LeadID = ra.LeadID)
WHEN MATCHED THEN
UPDATE SET AccountNumber = ra.AccountNumber
答案 2 :(得分:0)
如果要使用UPDATE而不是MERGE,则只想处理值将发生变化的匹配记录。
UPDATE Sales_Import SI
SET SI.AccountNumber =
(SELECT RAN.AccountNumber
FROM RetrieveAccountNumber RAN
WHERE SI.LeadID = RAN.LeadID
FETCH FIRST ROW ONLY
)
WHERE SI.LeadID IN
(SELECT S2.LeadID
FROM Sales_Import S2
JOIN RetrieveAccountNumber R2
ON S2.LeadID = R2.LeadID
WHERE S2.AccountNumber <> R2.RetrieveAccountNumber
)
答案 3 :(得分:0)
回答你的问题
UPDATE Sales_Import f1
SET f1.AccountNumber =
(
SELECT f2.AccountNumber
FROM RetrieveAccountNumber f2
WHERE f1.LeadID = f2.LeadID
FETCH FIRST ROW ONLY
)
WHERE exists
(
SELECT * FROM RetrieveAccountNumber f2
WHERE f1.LeadID = f2.LeadID
)
模板方法
update table1 f1
set (f1.field1, f1.field2, f1.field3, f1.field4)=
(
select f2.field1, f2.field2, f2.field3, 'CONSTVALUE'
from table2 f2
where (f1.key1, f1.key2)=(f2.key1, f2.key2)
)
where exists
(
select * from table2 f2
where (f1.key1, f1.key2)=(f2.key1, f2.key2)
)
答案 4 :(得分:0)
UPDATE USERS.A A SET A.NAME=(SELECT B.NAME FROM USERS.B B WHERE A.ID=B.ID );
答案 5 :(得分:0)
如果其他人想要使用DB2上另一个表的值的SUM()更新表。我遇到了许多与联接有关的问题,最后在UPDATE中进行了简单的SELECT解决。谢谢@mustaccio
TABLE_A
ID......|TOTAL...|...
1
5
6
TABLE_B
ID......|REF_ID...|QUANTITY|...
1 5 20
2 1 25
3 1 3
SQL Statement:
UPDATE TABLE_A ta
SET ta.TOTAL = (
SELECT SUM(tb.QUANTITY)
FROM TABLE_B tb
WHERE tb.REF_ID = ta.ID
)
RESULT
TABLE_A
ID......|TOTAL...|...
1 28
5 20
6 NULL