Sql 从“选择”更新具有更多列的多个列

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

我需要更新给定查询中的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\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
。但我强烈建议您在这里重新思考您的方法。请提供示例数据和预期结果。如果你删除了你提到的两列,那么总数就不同了。你的问题以一种与开始完全不同的方式结束。你到底想要什么?你的目标是什么?选择它还是更新它?