Mysql 调用单个函数两次

Mysql 调用单个函数两次,mysql,sql,Mysql,Sql,我有一个mysql函数function1(n为varchar),它返回一些逗号分隔的字符串,比如str1、str2 我可以发出select语句,如 Select function1("ABC") from dual; 我想将此函数的输出插入一个表中,如comlun1containsstr1和column2containsstr2我可以调用function1(“ABC”)2次,并用逗号分割输出,将每个部分存储在特定列中。但有没有办法只调用function1一次就可以将值插入表中。我想您可以这样做

我有一个mysql函数
function1(n为varchar)
,它返回一些逗号分隔的字符串,比如
str1、str2

我可以发出select语句,如

Select function1("ABC") from dual;
我想将此函数的输出插入一个表中,如
comlun1
contains
str1
column2
contains
str2
我可以调用
function1(“ABC”)
2次,并用逗号分割输出,将每个部分存储在特定列中。但有没有办法只调用
function1
一次就可以将值插入表中。

我想您可以这样做:

   UPDATE table_name t
     JOIN (
       SELECT function1("ABC") val
/*       FROM dual /* Not sure if you need this */
          ) f
      SET t.column1 = SUBSTRING_INDEX(f.val,', ', 1),
          t.column2 = SUBSTRING_INDEX(f.val,', ',-1)
/*  WHERE ... */

我很确定它只调用函数一次。

不太可能。您可以执行
选择@x:=function1(“ABC”)
,然后在需要时使用
@x
变量。但不能让单个函数调用将数据返回到查询字符串中的两个不同位置。这在任何语言中都是不可能的。@MarcB这在MySQL中是可能的,因为
JOIN
的魔力!来自dual的
部分只是为了与Oracle更兼容一点。在Oracle的
SELECT
语法中,关键字
FROM
不是可选的。@VMai在某些MySQL中,如果您想要一个WHERE子句,它是必需的。。你是对的,但是,这里可能没有必要。