我有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
答案 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
)