mysql查询报错Subquery returns more than 1 row

首先翻译一下这句报错:“子查询返回多行”。

我出现这种情况的sql语句如下:

UPDATE app_info set app_name = '61儿童劫'
WHERE app_id = '031cb9d72e7b40d6b4aa23e049365913'
and FIND_IN_SET('03fc8f60804a11eaa920ce79dca53588',(SELECT user_id FROM user_table WHERE table_name = 'app_info'))

一开始,子查询只查出一条数据的时候,这个sql语句可以正常运行,但当子查询不止一个结果的时候,就会报如上的错误。这是因为我使用的函数FIND_IN_SET()的缘故。

FIND_IN_SET()函数一共有两个参数,第一个参数是待查的字符串,第二个参数是字符串列表,所谓的字符串列表就是多个字符串拼接,中间以逗号相隔,例如:a,b,c,dFIND_IN_SET()函数返回的其实是待查字符串在字符串中的位置,例如:

SELECT FIND_IN_SET('b','a,b,c,d') as `index`

这个sql语句查询的结果就是:2。注意,不是从0开始计数的。

那么我们现在只需要将子查询中的查询结果拼成一个字符串就可以了,我们可以使用GROUP_CONCAT()函数,虽然这个函数的主要作用不是拼接查询到的字符串,但是我们在这里可以这么使用,有兴趣的朋友可以去查看这个函数具体的作用。

那么,上面的sql语句就变成了:

UPDATE app_info set app_name = '61儿童劫'
WHERE app_id = '031cb9d72e7b40d6b4aa23e049365913'
and FIND_IN_SET('03fc8f60804a11eaa920ce79dca53588',(SELECT GROUP_CONCAT(user_id) FROM user_table WHERE table_name = 'app_info'))

这个sql是可以正常查询的。

你可能感兴趣的:(MySQL,mysql)