SQL(Oracle)使用计算值更新多行(距离由勾股定理确定)
如何使用从同一记录的其他两列中的值派生的计算数据更新所有行 情况如下: 我有一张名为“客户”的表格。它有4列-SQL(Oracle)使用计算值更新多行(距离由勾股定理确定),sql,oracle,oracle-apex,Sql,Oracle,Oracle Apex,如何使用从同一记录的其他两列中的值派生的计算数据更新所有行 情况如下: 我有一张名为“客户”的表格。它有4列-Customer\u ID,Customer\u Name,Coordinate\u X和Coordinate\u Y。在创建并用数据填充表格之后,我添加了一个名为Distance 我想做的是用从(0,0)到每行坐标X和坐标Y列中指定位置的计算距离填充距离列。我想我可以使用毕达哥拉斯的理论——当我使用查询时,会出现正确的值: Select SQRT(Power(customers.coo
Customer\u ID
,Customer\u Name
,Coordinate\u X
和Coordinate\u Y
。在创建并用数据填充表格之后,我添加了一个名为Distance
我想做的是用从(0,0)到每行坐标X
和坐标Y
列中指定位置的计算距离填充距离
列。我想我可以使用毕达哥拉斯的理论——当我使用查询时,会出现正确的值:
Select SQRT(Power(customers.coordinate_x,2) + Power(customers.coordinate_y,2)) from customers
我胡思乱想,试图触发——由于缺乏经验而失败了。
然后我尝试使用查询填充该列,但也失败了
我一直在尝试这样的事情
update customers set distance = (Select SQRT(Power(customers.coordinate_x,2) + Power(customers.coordinate_y,2)) from customers)
什么都不起作用-我得到的最好结果是
ORA-01427:单行子查询返回多行
查询比您正在执行的操作更简单:
update customers
set distance = SQRT(Power(coordinate_x, 2) + Power(coordinate_y, 2))
查询比您正在执行的操作更简单:
update customers
set distance = SQRT(Power(coordinate_x, 2) + Power(coordinate_y, 2))
戈登的回答是正确的。但是,对于此特定示例,最好使用虚拟列,并且在更改客户坐标后不必更新距离:
create table customers (
customer_id number,
customer_name varchar(255),
coordinate_x number,
coordinate_y number,
distance number generated always as (SQRT(Power(coordinate_x, 2) + Power(coordinate_y, 2))) VIRTUAL
))
看看这个SQLFIDLE:戈登的答案是正确的。但是,对于此特定示例,最好使用虚拟列,并且在更改客户坐标后不必更新距离:
create table customers (
customer_id number,
customer_name varchar(255),
coordinate_x number,
coordinate_y number,
distance number generated always as (SQRT(Power(coordinate_x, 2) + Power(coordinate_y, 2))) VIRTUAL
))
请参阅此SQLFIDLE:我删除了无关的数据库标记,因为该错误是Oracle错误。我删除了无关的数据库标记,因为该错误是Oracle错误。回答得好,但OP应该知道这只适用于Oracle 11g及以上版本。回答得好,但OP应该知道这只适用于Oracle 11g及以上版本。