我需要使用table1
的值更新table2
,条件是匹配前3个字符。
所以我做了:
update lead_db l1
inner join option_nat n1 on n1.nat_title=left(l1.ld_naty,3)
set l1.ld_ncode=n1.nat_id
但是什么也没发生。请告诉我,我在这里做错了什么!
答案 0 :(得分:1)
你可以尝试这个,如果它不起作用,请告诉我。
update lead_db l1, option_nat n1
set l1.ld_ncode=n1.nat_id
where n1.nat_title regexp left(l1.ld_naty,3)
答案 1 :(得分:0)
试试这个
UPDATE lead_db l1
INNER JOIN option_nat n1
ON n1.nat_title LIKE CONCAT(LEFT(l1.ld_naty,3), '%')
SET l1.ld_ncode = n1.nat_id
因为如果他们的值是ABCDEF
和ABC123
,ABCDEF
和ABC
之间的比较是错误的!但是,如果您尝试ABCDEF LIKE "ABC%"
,它将有效...
答案 2 :(得分:0)
没有发生任何事情的原因是因为数据库无法执行您要告诉它的连接。如果nat_title
超过3个字符(就像您在评论中所说的那样),则无法加入任何内容。
示例:假设nat_title
包含值“这是一个示例”,ld_naty
仅包含“Thi”。你现在正试图在“Thi”上加入“这是一个例子”,这显然不起作用,因为它不一样。
你需要这样的东西:
UPDATE lead_db l1
INNER JOIN option_nat n1 on n1.nat_title LIKE CONCAT(LEFT(l1.ld_naty,3), '%')
SET l1.ld_ncode = n1.nat_id
但请确保这真的是你想要的。因为现在“这是一个例子”将加入任何以字母“Thi”开头的(并且它甚至不区分大小写,所以“tHi”也是一个有效的连接。) / p>