根据第一个表数据更新第二个表上的多个行

时间:2013-06-18 13:21:24

标签: sql oracle10g

我有2张桌子

TBL_HEADER
----------
HEADER_ID
COST_CENTER


TBL_RESULTS   
-----------
WEEK_NO
COST_CENTER
HEADER_ID_FK

我需要将TBL_HEADER中的所有COST_CENTER_CODES复制到TBL_RESULTS 加入HEADER_ID> HEADER_ID_FK。

我试过这个,但子查询返回多行

  UPDATE
   TBL_RESULTS R
SET
  COST_CENTRE = (
  SELECT 
    H.COST_CENTRE
  FROM
    TBL_HEADER H,
    TBL_RESULTS R
  WHERE
    H.HEADER_ID = R.HEADER_ID_FK
  )

有人能指出我正确的方向并解释为什么会这样吗?

我正在使用Oracle 10.2.0.4

非常感谢

JC

3 个答案:

答案 0 :(得分:1)

您需要一个相关的子查询,而不是一个带连接的子查询:

UPDATE TBL_RESULTS
SET COST_CENTRE = (SELECT H.COST_CENTRE
                   FROM TBL_HEADER H 
                   WHERE H.HEADER_ID = TBL_RESULTS.HEADER_ID_FK
                  )

tbl_results的额外引用导致了问题。

答案 1 :(得分:0)

  SELECT 
    H.COST_CENTRE
  FROM
    TBL_HEADER H,
    TBL_RESULTS R
  WHERE
    H.HEADER_ID = R.HEADER_ID_FK

将从ID匹配的TBL_HEADER返回每个成本中心。您需要使用更新语句“加入”子选择,即“where H.HEADER_ID = TBL_RESULTS.HEADER_ID_FK”,其中“TBL_RESULTS”是更新语句中的表。

此外,您在子选择中不需要TBL_RESULTS R.

答案 2 :(得分:0)

UPDATE
   TBL_RESULTS R
SET
  COST_CENTRE = (
  SELECT 
    H.COST_CENTRE
  FROM
    TBL_HEADER H
  WHERE
    H.HEADER_ID = R.HEADER_ID_FK
  )