0

我有 2 张桌子

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


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

我需要将所有 COST_CENTER_CODES 从 TBL_HEADER 复制到 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

4

3 回答 3

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引起了问题。

于 2013-06-18T13:25:36.903 回答
0
  SELECT 
    H.COST_CENTRE
  FROM
    TBL_HEADER H,
    TBL_RESULTS R
  WHERE
    H.HEADER_ID = R.HEADER_ID_FK

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

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

于 2013-06-18T13:29:37.837 回答
0
UPDATE
   TBL_RESULTS R
SET
  COST_CENTRE = (
  SELECT 
    H.COST_CENTRE
  FROM
    TBL_HEADER H
  WHERE
    H.HEADER_ID = R.HEADER_ID_FK
  )
于 2013-06-18T13:55:04.703 回答