我使用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)
感谢您的帮助
答案 0 :(得分:0)
我会将update
与join
:
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;