所以我有一个名为' price '的表,其中包含'dbName',dbRetailer'和'dbPrice'列。
我正在尝试将'dbPrice'更新10%,但仅限于由'Microsoft'开发的数据库
我还有另外两个名为“ dbSystem ”和“ dbProducer ”的表。
'dbName'是'db_Name'的外键,它是表' dbSystem '中的主键
在' dbSystem '里面有一个名为'producerName'的外键,它指向' dbProducer '中的主键'producer_Name',它是生成者名称(例如微软)。
所以我的问题是如何创建只更新“Microsoft”开发的数据库的更新查询?
到目前为止,我有代码:
update price set dbPrice = dbPrice * 1.1 where producer_Name = 'Microsoft';
但是这无法实现查询所需信息的路径,这意味着我得到的错误就像
“producer_Name:无效的标识符”。
非常感谢任何帮助!
答案 0 :(得分:2)
如果我理解得很好,您可能需要MERGE。
设置:
create table price (dbName varchar2(100), dbRetailer varchar2(100), dbPrice number);
create table dbSystem (dbName varchar2(100), producer_Name varchar2(100));
create table dbProducer ( producer_Name varchar2(100));
insert into dbProducer values ('Microsoft');
insert into dbProducer values ('Other');
insert into dbSystem values ('Microsoft Product 1', 'Microsoft');
insert into dbSystem values ('Microsoft Product 2', 'Microsoft');
insert into dbSystem values ('Another Product', 'Other');
insert into price values ('Microsoft Product 1', 'Retailer', 100);
insert into price values ('Microsoft Product 2', 'Retailer', 200);
insert into price values ('Another Product', 'Retailer', 50);
sql:
merge into price P
using (
select *
from dbSystem
inner join dbProducer using(producer_name)
where producer_name = 'Microsoft'
) M
on (M.dbName = P.dbName)
when matched then
update
set dbPrice = dbPrice * 1.1
在这里,我使用dbProducer
将过滤器应用于' Microsoft',但如果您需要过滤的值已经在PK中,则可以使其更简单:
merge into price P
using (
select *
from dbSystem
where producer_name = 'Microsoft'
) M
on (M.dbName = P.dbName)
when matched then
update
set dbPrice = dbPrice * 1.1
答案 1 :(得分:0)
update price
set dbPrice = dbPrice * 1.1
where dbName in ( select dbName
from dbSystem
where producer_Name = 'Microsoft'
)
;