Mysql 当从SELECT语句执行函数时,是否会多次构建存储函数中的临时表?

Mysql 当从SELECT语句执行函数时,是否会多次构建存储函数中的临时表?,mysql,database,Mysql,Database,假设我有一个函数,它创建了一个临时表,我想用于SELECT查询。函数是否有可能在SELECT语句中多次重建临时表?这种情况下的最佳实践是什么 CREATE FUNCTION getID(id INT) RETURNS INT DETERMINISTIC BEGIN -- build ID table CREATE TEMPORARY TABLE IF EXISTS tbl2( id int, val int ); -- insert values into tb

假设我有一个函数,它创建了一个临时表,我想用于
SELECT
查询。函数是否有可能在
SELECT
语句中多次重建临时表?这种情况下的最佳实践是什么

CREATE FUNCTION getID(id INT)
RETURNS INT DETERMINISTIC
BEGIN
  -- build ID table
  CREATE TEMPORARY TABLE IF EXISTS tbl2(
    id int,
    val int
  );

  -- insert values into tbl2 here

  SET @id = NULL;

  SELECT tbl2.id INTO @id from tbl2 where id = tbl2.id;
  return @id;
END

不可以。所有调用都将在同一个连接中执行,因此除第一个调用外,所有调用都存在该表。您可以强制执行该表,但实际问题是什么?您想在这里做什么?该函数将被调用
x
*
。话虽如此,MySQL不允许创建拖放表,也不允许在函数中选择。存储过程,但deos允许this@Nae我希望在查询中运行该函数,但我不希望每次必须运行该函数时都重建临时表。@J.Chan好的,但仍然可以。你为什么需要这个?
SELECT getID(id)
FROM tbl
WHERE condition;