2013-02-09 63 views
1

我是MySQL函數的新手。對於下面的簡單情況,我對'Subquery返回多於一行'錯誤感到困惑。對於簡單情況,'子查詢返回多於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) 
+3

請多放一點精力問你的問題。 – 2013-02-09 13:44:17

回答

-1

你的函數應該返回一個字符串。這個查詢:

select last_name from users where username = 'steve' 

將返回多條記錄。因此你的功能不知道該怎麼做。它不能將多個記錄轉換爲單個字符串。

你對此做了什麼取決於你想要完成什麼。

+0

雖然在編輯之前問題還不清楚,但它表明該查詢返回1條記錄 – wimh 2013-02-09 14:33:47

2

您的功能使用username兩次;

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

您使用UserLNFromUsername('steve'),所以這裏查詢將成爲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); 
相關問題