在SQL中从一个表复制数据
我需要通过从另一个表复制信息来更新属性。唯一的问题是确定所需的信息,我基本上必须遵循这种格式。 通过以下方式更新charter表: 将char_wait_chg设置为等于 通过匹配从模型和飞机中选择mod_wait_chg 模型和飞机表之间的mod_代码,以及 飞机和包机台之间的ac_编号。 我有一个包机表,其中包含AC_编号和CHAR_WAIT_CHG,飞机表包含AC_编号和MOD_代码,模型表包含MOD_代码和MOD_WAIT_CHG。我需要使CHAR_WAIT_CHG等于MOD_WAIT_CHG,我想我可以使用子查询,但是我得到错误ORA-01427:单行子查询返回多行。以下是我尝试过的:在SQL中从一个表复制数据,sql,join,subquery,using,Sql,Join,Subquery,Using,我需要通过从另一个表复制信息来更新属性。唯一的问题是确定所需的信息,我基本上必须遵循这种格式。 通过以下方式更新charter表: 将char_wait_chg设置为等于 通过匹配从模型和飞机中选择mod_wait_chg 模型和飞机表之间的mod_代码,以及 飞机和包机台之间的ac_编号。 我有一个包机表,其中包含AC_编号和CHAR_WAIT_CHG,飞机表包含AC_编号和MOD_代码,模型表包含MOD_代码和MOD_WAIT_CHG。我需要使CHAR_WAIT_CHG等于MOD_WAIT_
UPDATE CHARTER
SET CHAR_TOT_CHG=(SELECT MOD_WAIT_CHG FROM MODEL JOIN AIRCRAFT USING(MOD_CODE) JOIN CHARTER USING(AC_NUMBER));
我希望我对此解释得足够清楚,如有任何帮助,将不胜感激。这是您的疑问。子查询返回多行:
UPDATE CHARTER
SET CHAR_TOT_CHG = (SELECT MOD_WAIT_CHG
FROM MODEL JOIN
AIRCRAFT
USING(MOD_CODE) JOIN
CHARTER
USING(AC_NUMBER)
);
您必须决定如何将其转换为一行
第一种可能性是子查询错误(因为它返回三个表中的所有行)
如果您真的不想在子查询中有一个不同的charter
,那么将其作为一个相关子查询,这样您就不会返回所有表中的所有行:
UPDATE CHARTER
SET CHAR_TOT_CHG = (SELECT MOD_WAIT_CHG
FROM MODEL JOIN
AIRCRAFT
USING(MOD_CODE)
where charter.ac_number = aircraft.ac_number
);
这可能会也可能不会解决问题。你仍然可以有复制品,你必须决定如何处理它们
如果任意行正常,则添加:
where rownum = 1
如果需要值的min()
/max()
/sum()
/avg()
,请使用:
SET CHAR_TOT_CHG = (SELECT sum(MOD_WAIT_CHG) . . .
如果它不应该返回重复的数据,那么进一步调查数据