首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试编写要在mysql UPDATE SET语句中使用的存储函数

尝试编写要在mysql UPDATE SET语句中使用的存储函数
EN

Stack Overflow用户
提问于 2019-09-25 13:25:16
回答 1查看 39关注 0票数 0

我有两张桌子-2和TABLE_3

  • TABLE-2

代码语言:javascript
复制
Preferred_Name|name_TABLE_3
---------------------------
Pref_Name1    |
Pref_Name2    |
Pref_Name3    |
...etc

  • TABLE_3

代码语言:javascript
复制
name
-----
name1
name2
name3
...etc

我试图使用针对('Preferred_Name')的匹配(名称)来更新表2,其中包含来自TABLE_3的最佳匹配名称,如:

选择name,MATCH (name) as ('Preferred_Name')作为关联,从TABLE_3 WHERE MATCH (name) as ('Preferred_Name')中选择relevance=max(MATCH (name) as ('Preferred_Name'))

但是,由于SET不接受变量,所以我尝试通过一个存储函数来完成它,我试图在phpmyadmin中编写一个存储函数,以便在UPDATE SET语句中使用:

代码语言:javascript
复制
UPDATE `TABLE-2` SET `TABLE-2`.`name_TABLE_3` = best_fulltext_match(`TABLE-2`.`Preferred_Name`);

内部代码:

选择name,MATCH (name) as ('Preferred_Name')作为关联,从TABLE_3 WHERE MATCH (name) as ('Preferred_Name')中选择relevance=max(MATCH (name) as ('Preferred_Name'))

当每次使用一个关键字时,工作正常,并显示正确的查询,但当我执行该函数时,没有得到任何结果。感谢你的帮助。

代码语言:javascript
复制
CREATE DEFINER=`root`@`localhost` FUNCTION `best_fulltext_match`(`search_string` TEXT) RETURNS varchar(600) CHARSET latin1
DETERMINISTIC
BEGIN
RETURN (SELECT `name`, MATCH (`name`) AGAINST ('search_string') as relevance FROM `TABLE_3` WHERE MATCH (`name`) AGAINST ('search_string') having relevance=max(MATCH (`name`) AGAINST ('search_string'))); 
END
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-25 13:43:35

MySQL函数只返回单个值,因此与其从函数返回整个表,不如使用存储过程。

代码语言:javascript
复制
CREATE PROCEDURE `best_fulltext_match`(`search_string` IN TEXT)
CHARSET latin1
BEGIN
        SELECT `name`, MATCH (`name`) AGAINST (`search_string`) as relevance
        FROM `TABLE_3`
        WHERE MATCH (`name`) AGAINST (`search_string`)
        GROUP BY `name`
        HAVING relevance=max(MATCH (`name`) AGAINST (`search_string`))); 
END
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58099495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档