【发布时间】:2018-05-08 15:59:15
【问题描述】:
我有以下 SELECT 查询:
SELECT
T3.EPSINO AS FaktNr,
T3.EPDIVI AS Div,
T3.EPSUNO AS Lev,
T3.EPPYME AS BetMet,
T2.Summa AS Belopp
FROM
M3EDBPTS.FPLEDG T3
JOIN
(SELECT
T1.EPCONO, T1.EPSINO,
T1.EPDIVI, T1.EPSUNO,
SUM(T1.EPCUAM) AS Summa
FROM
M3EDBPTS.FPLEDG T1
WHERE
T1.EPCONO = 001 AND
T1.EPDIVI = '500' AND
T1.EPSUNO = '73823'
GROUP BY
T1.EPCONO,T1.EPDIVI, T1.EPSUNO, T1.EPSINO
HAVING
(SUM(T1.EPCUAM) <> 0)) AS T2 ON T3.EPCONO = T2.EPCONO
AND T3.EPDIVI = T2.EPDIVI
AND T3.EPSINO = T2.EPSINO
AND T3.EPSUNO = T2.EPSUNO
WHERE
T3.EPPYME IN ('KOT', 'ULK')
如何创建脚本来更新上面得到的结果?我试着写:
UPDATE T3
SET T3.EPPYME = 'SEP'
FROM M3EDBPTS.FPLEDG T3
JOIN (SELECT
T1.EPCONO, T1.EPSINO, T1.EPDIVI, T1.EPSUNO,
SUM(T1.EPCUAM) AS Summa
FROM M3EDBPTS.FPLEDG T1
WHERE T1.EPCONO = 001 AND T1.EPDIVI = '500' AND
T1.EPSUNO = '73823'
GROUP BY T1.EPCONO, T1.EPDIVI, T1.EPSUNO, T1.EPSINO
HAVING (SUM(T1.EPCUAM) <> 0)) AS T2 ON T3.EPCONO = T2.EPCONO
AND T3.EPDIVI = T2.EPDIVI
AND T3.EPSINO = T2.EPSINO
AND T3.EPSUNO = T2.EPSUNO
WHERE
T3.EPPYME IN ('KOT','ULK')
但我只得到错误:
SQL0199 - 没有预期的关键字 FROM。有效令牌:使用 SKIP WAIT WITH WHERE。
语法怎么错了?
示例 DB 表 FPLEDG:
【问题讨论】:
-
你一定是在开玩笑,问你的更新查询出了什么问题。只需查看 Internet 上任何更新 SQL 的语法,您就会知道。
-
将
SET移动到FROM声明下。 -
@a_horse_with_no_name Iseries/DB2
-
显然 DB2 不支持 UPDATE 使用 sub-select 和 where,所以不得不使用 MERGE 命令。
-
@Lily 这部分不正确,DB2 的表表达式不能是连接或只读视图,但 set 语句可能包含像这样的子选择
(col1, col2, col3) = (select col1, col2, col3 from ...)您需要确保sub-select 只为要更新的每一行返回一行,并且 update 语句不会尝试更新将导致 sub-select 不返回任何内容的行。
标签: sql join sql-update subquery db2-400