Age*_*one 3 db2 correlated-subquery sql-update db2-luw
下面的查询适用于SQL sErver.但在DB2中它没有给出结果:
Error is SQLCODE = -199, ERROR: ILLEGAL USE OF KEYWORD FROM.
Run Code Online (Sandbox Code Playgroud)
查询:
UPDATE
Sales_Import
SET
Sales_Import.AccountNumber = RAN.AccountNumber
FROM
Sales_Import SI
INNER JOIN
RetrieveAccountNumber RAN
ON
SI.LeadID = RAN.LeadID
Run Code Online (Sandbox Code Playgroud)
有人可以澄清b/w DB2和SQL查询的差异.
DB2确实支持UPDATE语句中的连接,而不是您认为的方式 - DB2遵循SQL ANSI标准:
UPDATE
Sales_Import SI
SET
Sales_Import.AccountNumber = (
SELECT
RAN.AccountNumber
FROM
RetrieveAccountNumber RAN
WHERE
SI.LeadID = RAN.LeadID
)
Run Code Online (Sandbox Code Playgroud)
以上假设LeadID唯一标识记录RetrieveAccountNumber,否则您将收到错误,因为子查询将返回多行.
编辑:
要解决以下注释,如果找不到匹配的记录RetrieveAccountNumber,Sales_Import.AccountNumber则将其设置为null.如果这是不合需要的,可以使用COALESCE()分配默认值.
我非常确定(尽管我已经有一段时间没有使用DB2了)DB2仍然不支持update语句中的联接,因此您需要使用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
Run Code Online (Sandbox Code Playgroud)