【发布时间】:2018-04-16 20:59:09
【问题描述】:
我需要从给定查询中更新 2 列,但问题是查询有超过 2 列,所以如果我删除附加列,这是正确的语法:
UPDATE myTable TAO
SET (TAO.BASE_AMT,TAO.TAX_CD_VAT_PCT) = (
SELECT SUM(decode(TAX_CD_VAT_PCT
, 0
, 0
,d.monetary_amount))
, MAX (D.TAX_CD_VAT_PCT)
FROM ps_VCHR_LINE_WTHD w
, PS_DISTRIB_LINE d
WHERE 1=1
-- some conditions
GROUP BY d.business_unit, d.voucher_id
ORDER BY 1, 2)
原始查询是这样的:
SELECT d.business_unit, d.voucher_id,SUM(decode(TAX_CD_VAT_PCT
, 0
, 0
,d.monetary_amount))
, MAX (D.TAX_CD_VAT_PCT)
FROM ps_VCHR_LINE_WTHD w
, PS_DISTRIB_LINE d
WHERE 1=1
-- some conditions
GROUP BY d.business_unit, d.voucher_id
ORDER BY 1, 2)
那么如果我删除d.business_unit, d.voucher_id 会得到相同的结果吗?因为我在删除它时在 SQL 开发人员中尝试过这个,所以我没有得到相同的顶行。
有人可以帮忙吗?
谢谢。
【问题讨论】:
-
那里发生了各种可怕的事情!您是否真的根据返回多个值的查询来更新表,并期望
ORDER BY子句“将其全部排序”? -
不使用join的传统做法肯定是个问题,不是ANSI-92标准,使用join而不是逗号
-
如果您想要与以前相同的结果,那么您可能需要将
ORDER BY 1, 2更改为ORDER BY d.business_unit, d.voucher_id。但我强烈建议您在这里重新考虑您的方法。 -
给我们样本数据和预期结果。如果您删除您提到的 2 列,那么总和会有所不同。
-
您的问题以与开始时截然不同的方式结束。你到底要什么?你的目标是什么?选择它还是更新它?