Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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_Oracle - Fatal编程技术网

Sql 更新数据库表信息问题

Sql 更新数据库表信息问题,sql,oracle,Sql,Oracle,因此,我得到了一个名为“price”的表,其中包含“dbName”、“dbRetailer”和“dbPrice”列 我正试图将“dbPrice”更新10%,但仅限于“Microsoft”开发的数据库 我还有另外两个表名为“dbSystem”和“dbProducer” “dbName”是“db_Name”的外键,它是表“dbSystem中的主键 在“dbSystem”中有一个外键,名为“producerName”,它指向“dbProducer”中的主键“producer\u Name”,即生产者名

因此,我得到了一个名为“price”的表,其中包含“dbName”、“dbRetailer”和“dbPrice”列

我正试图将“dbPrice”更新10%,但仅限于“Microsoft”开发的数据库

我还有另外两个表名为“dbSystem”和“dbProducer

“dbName”是“db_Name”的外键,它是表“dbSystem中的主键

在“dbSystem”中有一个外键,名为“producerName”,它指向“dbProducer”中的主键“producer\u Name”,即生产者名称(如Microsoft)

所以我的问题是如何创建一个只更新“Microsoft”开发的数据库的更新查询

到目前为止,我有代码:

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”的主键引用。但那个错误不是你的错,所有的名字都很相似,我都搞糊涂了。再次感谢!