mysql update table set column3其中table1.column1喜欢concat('%',table2.column2,'%')

时间:2016-09-28 19:45:17

标签: mysql concat

我最近看到了(现在无法找到)这种语法:     ......喜欢CONCAT('%',col1,'%')

它适用于Selects但是对于更新,它会影响0行 这是我的疑问:

update locations set email = (
    select col2 from vendoremail 
    where locations.city LIKE CONCAT('%',col1,'%') 
    AND locations.zip LIKE CONCAT('%',col1,'%')
)

这是col1的示例: " 455 N Cherokee St:Muskogee,OK 74403" 没有引号

我希望我已经提供了足够的数据来引出一两个答案 - 谢谢!

2 个答案:

答案 0 :(得分:1)

你倒退了。你想把城市和拉链放入模式中。

update locations set email = (
    select col2 from vendoremail 
    where col1 LIKE CONCAT('%', locations.city, '%', locations.zip, '%')
)

但是,这可能并不总是正常。如果您在同一个城市+ zip中有两个供应商,则子查询将返回2封电子邮件,但是当您使用子查询作为值时,它必须仅返回1行。您可以将LIMIT 1添加到子查询中,以防止发生这种情况时出错。但它会不可预测地选择其中一个供应商 - 也许你应该想出一种更可靠的方法来匹配表格。

答案 1 :(得分:0)

如果col1 =“455 N Cherokee St:Muskogee,OK 74403”

我认为location.city = Muskogee和locations.zip = 74403

那么查询应该是

update locations 
set email = (
select col2 from vendoremail 
where  col1   LIKE CONCAT('%',locations.city,'%') 
AND col1   locations.zip LIKE CONCAT('%',locations.zip,'%')
)