我有一个MySQL数据库,其中包含我需要修改的两个表。 第一个表格包含注释
id type note
1 1 24 months warranty
2 1 12 months warranty
3 2 Garage in Denver
4 3 Pre sales maintenance done
....
然后是一张车辆工作台,里面有许多车辆工作台和一个用文字而不是指针记录笔记的字段
id licence_plate ... sales_notes ...
1 XH34DN ... <warranty>24 months warranty</warranty><garage>Garage in Denver</garage><maintenance>Pre sales maintenance done</maintenance> ...
2 K4B3C6 ... <warranty>12 months warranty</warranty><garage>Garage in Sacramento</garage><maintenance>Pre sales maintenance not done</maintenance> ...
你可以想象这是非常有用的,我想修改为持有笔记id的指针。
id licence_plate ... warranty_note garage_note maintenace_note ...
1 XH34DN ... 1 3 4 ...
2 K4B3C6 ... 2 7 12 ...
我可以手动更新,但我想构建一个按类型自动生成的。
因此,对于notes.type = 1,如果在vehicle.sales_notes中找到notes.note文本,则更新vehicle.warranty_note。
知道怎么建这样的东西吗?
我有类似的想法,但是id不起作用。没有结果更新
UPDATE tx_vehicle v, tx_note n
SET v.garage_note = n.uid
WHERE v.sales_notes LIKE ('%'+n.note+'%')
答案 0 :(得分:0)
MySQL有特殊XML parsing functions。
insert into your_new_notes_table (id, licence_plate, warranty_note, garage_note, maintenace_note)
select
sn.id,
sn.license_plate,
(select nt.id from notes as nt where nt.type = 1 and nt.note = ExtractValue(sn.sales_note, "/warranty")) as warranty_note,
(select nt.id from notes as nt where nt.type = 1 and nt.note = ExtractValue(sn.sales_note, "/garage")) as garage_note,
(select nt.id from notes as nt where nt.type = 1 and nt.note = ExtractValue(sn.sales_note, "/maintenance")) as maintenance_note
from note_types as nt
虽然如果在note_types
表中找不到销售的确切记录,它将会失败。您可以调整注释文本比较,将其替换为like运算符,正则表达式检查或其他函数;你可以用完整的单词替换缩写或发明你自己的MySQL函数。此外,如果在select
表中找不到注释,您可以创建自己的MySQL函数,该函数将包含内部null
并返回note_types
。
如果您要更新现有表格,则需要update
join
查询与我提供的select
相同的class Pointer <T> {
T target = null;
Pointer(T target){
this.target = target;
}
static Pointer nullPointer(){
return new Pointer(null);
}
public void setTarget(T target){
this.target = target;
}
public T getTarget(){
return target;
}
}
。