Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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 ORACLE-使用筛选器从不同表中的两个不同列更新值_Sql_Oracle - Fatal编程技术网

Sql ORACLE-使用筛选器从不同表中的两个不同列更新值

Sql ORACLE-使用筛选器从不同表中的两个不同列更新值,sql,oracle,Sql,Oracle,我有一个小问题要问。 我必须从一个只有费用记录(整数)的表中更新一列。 我必须增加5%的费用,如果客户端来自特定的状态,该状态的列位于不同的表中,并且共同的键是地址 以下是我的问题: UPDATE table 1 a SET expense_vl = ( SELECT expense*1.05 FROM table 1 LEFT JOIN table2 b ON b.ADDRESS_ID=a.ADDRESS_ID WHERE description_state IN 'lollyland' )

我有一个小问题要问。 我必须从一个只有费用记录(整数)的表中更新一列。 我必须增加5%的费用,如果客户端来自特定的状态,该状态的列位于不同的表中,并且共同的键是地址

以下是我的问题:

UPDATE table 1 a
SET expense_vl = (
SELECT expense*1.05 FROM table 1
LEFT JOIN table2 b  ON b.ADDRESS_ID=a.ADDRESS_ID
WHERE description_state IN 'lollyland'
)
试试下面

UPDATE table1 a SET expense_vl = (SELECT expense*1.05
                                  FROM table2 b
                                  WHERE b.ADDRESS_ID=a.ADDRESS_ID)
WHERE description_state IN 'lollyland'
或者尝试使用subselect:

UPDATE table1
   SET expense_vl =  expense*1.05
 WHERE ADDRESS_ID IN (SELECT ADDRESS_ID FROM table2 WHERE description_state IN 'lollyland')

我认为您需要更改您的查询,如下所示:

 UPDATE table 1 A
    SET expense_vl=expense*1.05 FROM table 1
    LEFT JOIN table2 B ON B.ADDRESS_ID=A.ADDRESS_ID
    WHERE B.description_state IN 'lollyland'

我建议使用半联接:

update table_1 a
set expense_v1 = expense * 1.05
where exists (
  select null
  from table2 b
  where
    a.address_id = b.address_id and
    b.description_state = 'lollyland'
)
尽管我必须补充一点,如果您在表中包含DDL,这将有所帮助。我们在猜测“描述”来自哪个表

此外,如果可能,还应包括每个表的样本输入和所需输出。我们不需要一百万条记录,只需要一个例子来说明你的问题