Sql 更新数据库表信息问题
因此,我得到了一个名为“price”的表,其中包含“dbName”、“dbRetailer”和“dbPrice”列 我正试图将“dbPrice”更新10%,但仅限于“Microsoft”开发的数据库 我还有另外两个表名为“dbSystem”和“dbProducer” “dbName”是“db_Name”的外键,它是表“dbSystem中的主键 在“dbSystem”中有一个外键,名为“producerName”,它指向“dbProducer”中的主键“producer\u Name”,即生产者名称(如Microsoft) 所以我的问题是如何创建一个只更新“Microsoft”开发的数据库的更新查询 到目前为止,我有代码:Sql 更新数据库表信息问题,sql,oracle,Sql,Oracle,因此,我得到了一个名为“price”的表,其中包含“dbName”、“dbRetailer”和“dbPrice”列 我正试图将“dbPrice”更新10%,但仅限于“Microsoft”开发的数据库 我还有另外两个表名为“dbSystem”和“dbProducer” “dbName”是“db_Name”的外键,它是表“dbSystem中的主键 在“dbSystem”中有一个外键,名为“producerName”,它指向“dbProducer”中的主键“producer\u Name”,即生产者名
update price set dbPrice = dbPrice * 1.1 where producer_Name = 'Microsoft';
但这无法实现查询所需信息的路径,这意味着我会得到如下错误
“生产者名称:无效标识符”
在此方面的任何帮助都将不胜感激 如果我理解得很好,你可能需要一份工作 设置:
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
如果我理解的很好,你可能需要一份工作 设置:
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
mysql还是oracle?请只标记所涉及的数据库,我相信数据库管理系统是Oracle。您的列名是大写还是小写?是的,他们是,但我不认为这是问题所在,因为我的其余代码工作正常,除了这个更新语句。mysql或oracle?请只标记所涉及的数据库,我相信数据库管理系统是Oracle。您的列名是大写还是小写?是的,他们是,但我不认为这是问题所在,因为我的其余代码除了这个update语句外都可以正常工作。所以基本上我必须创建一个全新的表,以便可以从一个位置访问信息?我只是添加了脚本来创建一个新表,以便在我的系统上进行测试。查询将用于您的表。如果您有小写名称,只需编辑我的查询,添加双引号,并用正确的大小写写表和列的名称。因此,基本上,我必须创建一个全新的表,以便可以从一个位置访问信息?我只需添加脚本以创建一个新表,以便在我的系统上对其进行测试。查询将用于您的表。如果您有小写的名称,只需编辑我的查询,添加双引号,并用正确的大小写写表和列的名称都是“dbName”,您的示例正确吗?其中一个应该是“db_名称”吗?我尝试了你的代码,它没有抛出任何错误,但也没有更新数据。它是正确的!但我说得对,其中一个“dbName”可能是错的。括号内的“dbName”应该是“db_Name”,因为这是表“dbSystem”的主键引用。但那个错误不是你的错,所有的名字都很相似,我都搞糊涂了。再次感谢!都是“dbName”吗?您的示例是否正确?其中一个应该是“db_名称”吗?我尝试了你的代码,它没有抛出任何错误,但也没有更新数据。它是正确的!但我说得对,其中一个“dbName”可能是错的。括号内的“dbName”应该是“db_Name”,因为这是表“dbSystem”的主键引用。但那个错误不是你的错,所有的名字都很相似,我都搞糊涂了。再次感谢!