1

我是 MySQL 函数的新手。对于以下简单情况,我对“子查询返回超过 1 行”错误感到困惑。

这是我的功能。

mysql> create function UserLNFromUsername (username VARCHAR(20)) 
       RETURNS VARCHAR(30)
       return (select last_name from users where username = 'steve' );
Query OK, 0 rows affected (0.00 sec)

这是我遇到的错误。

mysql> select UserLNFromUsername('steve');
ERROR 1242 (21000): Subquery returns more than 1 row

这是只返回一行的查询结果。

mysql> select last_name from users where username = 'steve';
+-----------+
| last_name |
+-----------+
| Goldstein |
+-----------+
1 row in set (0.00 sec)
4

2 回答 2

2

您的功能使用username了两次;

mysql> create function UserLNFromUsername (username VARCHAR(20)) 
       RETURNS VARCHAR(30)
       return (select last_name from users where username = 'steve' );

您使用UserLNFromUsername('steve'),所以 where 查询将变为where 'steve' = 'steve',因此它将返回表中的所有记录。

我建议重命名参数,例如:

mysql> create function UserLNFromUsername (requestedusername VARCHAR(20)) 
       RETURNS VARCHAR(30)
       return (select last_name from users where username = 'steve' );

但你可能想用这个:

mysql> create function UserLNFromUsername (requestedusername VARCHAR(20)) 
       RETURNS VARCHAR(30)
       return (select last_name from users where username = requestedusername );
于 2013-02-09T14:29:49.833 回答
-1

您的函数应该返回一个字符串。这个查询:

select last_name from users where username = 'steve'

正在返回多条记录。因此,您的功能不知道该怎么做。它不能将多条记录转换为单个字符串。

您对此做什么取决于您要完成的工作。

于 2013-02-09T13:52:50.193 回答