MySQL用null替换成

时间:2014-04-23 01:11:24

标签: mysql null

我使用replace into用另一个表中的信息更新一个表。 第一个表称为srv_update,它包括:

srv_id,    , srv_list_price,   srv_list_price
'120', 'Third Feline PCR', '20.25'
'121', 'Flu Rhino Vacc', '26.00'
'122', 'Scaly Mite', '35.00'
'123', 'Intestinal Parasite Screen', '26.00'
'124', 'Tick Removal', '15.00'
'125', 'Behaviour Modification', '75.00'
'126', 'Vitamin E- Concentrated', '30.00'
'127', 'Sedative-Feline', '25.00'
'128', 'Flea Treatment- Small Animal', '35.00'
'129', 'Flea Treatment- Large Animal', '50.00'

第二个表是srv_update_changes_2,它包括:

item_id,   item_desc,      item_list_price
'134', 'Vitamin E series', '55.00'
'135', 'Feline PCR Series', '75.00'
'114', 'H1N1 vaccine', '75.00'
'115', 'H1N2 vaccine', '75.00'
'127', 'Sedative- small mammal', '75.00'
'111', 'Rabies_V-Rodent', '25.00'
'129', NULL, '25.00'

我想只替换现有ID而不插入任何新ID。此外,如果desc字段为null(它是第二个表的id 129),则替换空字段时应保留原始表的值(第一个表中的描述符)

129是唯一应受影响的行。我把它添加到表中以试图解决这个问题,但我似乎无法得到逻辑。我试过ifnull和香港专业教育学院尝试合并但我似乎无法得到正确的输出。它要么在更新的表中保持为null,要么插入错误的描述。

我还试图合并,其中第二个字段是一个子查询,用于检查第一个字段是否为空以将其替换为第一个表中的服务描述,其中该行项目标识与第二个表中的srv id匹配,其中第二个表的desc行为空

replace into upd_services
select item_id,
coalesce(item_desc,(
    select srv_desc 
from upd_services 
where srv_id in(
    select item_id
    from upd_services_changes_2
    where item_desc is null))) srv_desc,
item_list_price
from upd_services_changes_2 
where item_id in (
select srv_id
from upd_services)

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我会将updatejoin

一起使用
update upd_services us join
       upd_services_changes_2 usc
       on us.srv_id = usc.item_id
    set us.srv_desc = coalesce(usc.item_desc, us.srv_desc),
        us.srv_list_price = usc.item_list_price;