MySQL用户定义函数存储查询结果

Posted

技术标签:

【中文标题】MySQL用户定义函数存储查询结果【英文标题】:MySQL User Defined Functions store query results 【发布时间】:2014-02-24 06:57:59 【问题描述】:

目标: 我正在尝试将查询的表结果存储为函数中的变量。 我希望能够在这个过程中参考这些表格做更多的事情。

我在下面有一个脚手架函数:

DELIMITER $$
CREATE FUNCTION getRatio(treatmentA INT, treatmentB INT)
RETURNS FLOAT
BEGIN
    DECLARE answer FLOAT;
    DECLARE countA, countB, countABIntersection;

    # Store patients of treatment A
    SELECT DISTINCT patient
    INTO **Variable**
    FROM Treatment
    WHERE TreatmentID = treatmentA;

    # Store patients of treatment B
    SELECT DISTINCT patient
    INTO **Variable**
    FROM Treatment
    WHERE TreatmentID = treatmentB;

    # Get Intersection of treatment B

    Set answer = count(TreatmentA) * count(TreatmentB) * count(IntersectionTreatmentAB)

    RETURN answer;
END $$
DELIMITER ;

如果有人可以提供帮助,将不胜感激。 提前致谢。

【问题讨论】:

您可以在 Select 语句中的上述变量中​​存储单个值。不确定您的 select 语句返回了多少值。 【参考方案1】:

您只能从 mysql 具有数据类型的函数中存储或返回值。

简而言之,如果要将结果集存储到变量中,则必须具有表数据类型,不幸的是 MySQL 没有。

解决方案:您可以做的是,您可以为要存储的每个结果集创建具有相应列的临时表(或者在您的情况下可能在同一个临时表中)。

对临时表执行所有操作并将结果存储到变量(在你的情况下为 FLOAT),返回变量。

如果有帮助,请告诉我:)

-谢谢

【讨论】:

谢谢!我不知道 MySQL 中没有表数据类型。

以上是关于MySQL用户定义函数存储查询结果的主要内容,如果未能解决你的问题,请参考以下文章

mysql 基本

MySQL查询缓存

如何将简单的 SQL 查询存储到用户定义的变量中并在 MySQL 中执行?

优化 MySQL 查询,避免对用户自定义函数的不必要调用

Mysql基础调优

MYSQL优化