从选择中更新表

时间:2018-10-05 10:56:07

标签: sql oracle ssms

我正在使用ORACLE DATABASE 11g Express Edition和Microsoft SQL Server Management Studio17。

我有两个桌子

第一张桌子:汽车

Code | Brand_Model
01   | honda/HVR
02   | Volks/Golf
03   |  Fiat

第二张表:INFOS

Brand | Model
is empty for now

问题出在这里:

我需要从cars.brand_model中选择数据并拆分。 '/'之前的数据,我需要放入INFOS.Brand,'/'之后的数据,我需要放入INFOS.Model 而且,当没有“ /”时(例如表CARS中的代码3),我需要将信息“无信息”放入INFOS.Model

我是这样选择的:

select 
iif(CHARINDEX('/',c.brand_model,1) > 0, substring(c.brand_model,0,charindex('/',c.brand_model,1)),c.brand_model) as brand,

iif(CHARINDEX('/',c.brand_model,1) > 0, substring(c.brand_model,charindex('/',c.brand_model,1)+1,len(c.brand_model)),'NO INFORMATION') as model 
from CARS c;

此选择完全按照我的需要显示信息,但这只是一个选择。

Brand     Model
Honda     HVR
Volks     Golf
Fiat      No Information

我需要将这些信息(这些选择)放在“信息”表中。

我使用以下代码放置品牌:

insert into infos (brand) select 
iif(CHARINDEX('/',c.brand_model,1) > 0, substring(c.brand_model,0,charindex('/',c.brand_model,1)),c.brand_model) 
from CARS c

可以。 但是现在,我需要使用模型在INFOS表中进行更新。 我该怎么办?

2 个答案:

答案 0 :(得分:0)

虽然您共享的代码似乎不是Oracle的,但是如果要插入数据(如果不存在)并更新记录(如果已经存在),则可以始终使用MERGE语句。

答案 1 :(得分:0)

这是有效的Oracle语法,也许您觉得它有用:

insert into infos (brand, model)
select case when instr(brand_model, '/') > 0 
            then substr(brand_model, 1, instr(brand_model, '/') - 1) 
            else brand_model
       end,
       case when instr(brand_model, '/') > 0 
            then substr(brand_model, instr(brand_model, '/') + 1) 
            else 'no information'
       end
  from cars