Sql 从“选择”更新具有更多列的多个列
我需要更新给定查询中的2列,但问题是该查询的列数超过了2列,因此,如果去掉其他列,这是正确的语法:Sql 从“选择”更新具有更多列的多个列,sql,oracle,Sql,Oracle,我需要更新给定查询中的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_DIS
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\u unit,d.voucher\u id
我会得到相同的结果吗?因为我在sqldeveloper中尝试了这个方法,当我删除它时,我没有得到相同的顶行
有人能帮忙吗
谢谢。使用
MERGE
语句。很难确定update语句与嵌套select的关联方式(似乎没有任何关联),但是,假设它位于业务单元
和凭证id
列上,则类似于:
MERGE INTO my_table dst
USING (
SELECT d.business_unit,
d.voucher_id,
SUM( DECODE( TAX_CD_VAT_PCT, 0, 0, d.monetary_amount ) ) AS total_tax_cd_vat_pct,
MAX (D.TAX_CD_VAT_PCT) AS max_tax_cd_vat_pct
FROM ps_VCHR_LINE_WTHD w
INNER JOIN
PS_DISTRIB_LINE d
ON ( /* some conditions here */ )
WHERE 1=1
-- some conditions
GROUP BY
d.business_unit,
d.voucher_id
) src
ON (
src.business_unit = dst.business_unit
AND src.voucher_id = dst.voucher_id
)
WHEN MATCHED THEN
UPDATE SET
BASE_AMT = src.total_tax_cd_vat_pct
TAX_CD_VAT_PCT = src.max_tax_cd_vat_pct;
那里发生了各种可怕的事情!您是否真的基于返回多个值的查询更新表,并期望“
orderby
子句”将此全部排序?不使用联接的传统做法肯定是一个问题,而不是ANSI-92标准,使用join而不是COMMASI如果希望获得与以前相同的结果,则可能需要将订单1,2
更改为订单d.业务单位d.凭证id
。但我强烈建议您在这里重新思考您的方法。请提供示例数据和预期结果。如果你删除了你提到的两列,那么总数就不同了。你的问题以一种与开始完全不同的方式结束。你到底想要什么?你的目标是什么?选择它还是更新它?