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函数的输出不符合预期的主要内容,如果未能解决你的问题,请参考以下文章