场景:dict存有常用值,value+name,area存有citycode和cityname,supplier存有price/citycode/value,在使用时,想通过value或citycode联查3表,就可用到函数。
1、编写函数
函数的编写类似建表脚本,如下:
CREATE DEFINER = `root`@`%` FUNCTION `getNameEn`(
txt VARCHAR(255) ,
value int(10)
) RETURNS VARCHAR(255) CHARSET utf8
BEGIN
DECLARE nameEn VARCHAR(255) DEFAULT '';
SELECT
vi.val --想查出的列--
FROM
v_i18n vi
WHERE
vi.value = i18nValue--参数1-- AND vi.txt = i18nTxt--参数2-- INTO nameEn;
RETURN
nameEn ;
END
上面的函数中,最关键就是红色的2个参数,等会会要用到。
2、函数的使用
如想通过函数查出dict表中operation对应的英文名(存放在i18n表中):
SELECT
v.pid ,
getI18nEn(//函数名
v.operation_type ,//与value对应,即 vi.value = i18nValue
v.operation_name//与txt对应,即vi.txt = i18nTxt
) AS operation_en //翻译过来,即“select val from i18n vi where v.operation_type =vi.value and v.operation_name = vi.txt"
from xx v
3、功能
适用于需要几个表join且没有能一一对应或多对一的on字段时,特方便。