1

MySQL 関数は初めてです。以下の単純なケースで、「サブクエリが複数の行を返します」というエラーに困惑しています。

これが私の機能です。

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

これは、1 行のみを返すクエリの結果です。

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

2 に答える 2

2

あなたの関数はusername2回使用しています。

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 に答える