我是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)
答案 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'
返回多条记录。因此,您的功能不知道该怎么做。它无法将多个记录转换为单个字符串。
您对此采取的措施取决于您要完成的任务。