mysql函数的输出不符合预期

Posted

技术标签:

【中文标题】mysql函数的输出不符合预期【英文标题】:Output of mysql function is not as expected 【发布时间】:2021-10-04 20:35:57 【问题描述】:

我在员工表中总共有 3 个条目,具有下表架构。 员工(ID、名字、姓氏、薪水) 表项如下。

ID FirstName LastName Salary
1  ABC       abc      10000
2  PQR       pqr      2000
3  XYZ       xyz      19000

我已经创建了一个函数 getFullName 如下。

Delimiter $$
Create Function getNamae(d_id INT) Returns varchar(200) deterministic
Begin 
   Declare full_name varchar(200) Default "";
   select concat(FirstName,LastName) INTO full_name from Employee where ID=d_id;
   Return full_name;
END $$

我已经调用了这个函数,如下所示

Select getNamae(2) as full_name 
from Employee

但我得到了 3 次输出 PQRpqr。

不应该只输出一次 PQRpqr 吗?

请谁能告诉我为什么会发生这种情况。我是初学者,看不懂。

【问题讨论】:

当然。为每个源行调用该函数,并且每次返回相同的输出。你需要Select getNamae(id) as full_name from Employee WHERE id = 2 【参考方案1】:

如果只需要员工 2 的姓名,则无需从表中进行选择。只需使用

SELECT getNamae(2) as full_name;

当您使用from Employee 时,它会为表格的每一行调用该函数。

【讨论】:

【参考方案2】:

我会推荐一种不同的方法。在 mysql 中,您可以在表中创建虚拟列,虚拟列的值是计算的,很像 Microsoft Excel 中的公式。

查看this page in the documentation 最底部的示例 - 这正是您的用例,连接了名字和姓氏。

【讨论】:

虽然这可能是个好主意,但这与为什么他只想要 1 个结果却得到 3 个结果没有太大关系。 @Barmar,你是完全正确的,你的回答是相关的,但是因为在问题中说是“初学者”,我认为提供一个内置的解决方案会有所帮助他正在尝试重新发明。 我通常将此类建议放在评论中。 @Peter 谢谢你告诉这个方法。我不知道 MySQL 中的虚拟列。我从你那里学到了新东西。【参考方案3】:

查询应该是这样的

Select getNamae(2) as full_name;

【讨论】:

以上是关于mysql函数的输出不符合预期的主要内容,如果未能解决你的问题,请参考以下文章

循环函数在 Java 类中的行为不符合预期

MySQL函数返回与其代码不同的输出

21.MySQL中的聚合函数

MySQL数据库:聚合函数的使用

MySQL为具有等效数字的值范围创建函数

MySQL初学者必备:控制流函数,日期和时间函数