Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中从一个表复制数据_Sql_Join_Subquery_Using - Fatal编程技术网

在SQL中从一个表复制数据

在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_

我需要通过从另一个表复制信息来更新属性。唯一的问题是确定所需的信息,我基本上必须遵循这种格式。 通过以下方式更新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:单行子查询返回多行。以下是我尝试过的:

    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) . . .
如果它不应该返回重复的数据,那么进一步调查数据