对于简单的情况,“子查询返回多于1行”错误

时间:2013-02-09 13:40:51

标签: mysql sql function

我是MySQL Functions的新手。对于以下简单案例,我对'子查询返回超过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)

2 个答案:

答案 0 :(得分: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 );

答案 1 :(得分:-1)

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

select last_name from users where username = 'steve'

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

您对此采取的措施取决于您要完成的任务。