【问题标题】:Output of mysql function is not as expectedmysql函数的输出不符合预期
【发布时间】: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

标签: mysql function input output


【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 2014-09-22
      • 2022-01-16
      • 2017-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      相关资源
      最近更新 更多