mysql错误: "subquery returns more than one row" but i need more than one row from subquery

标签 mysql

我的问题中有两个表,一个是 USER 表,其中包含用户的所有详细信息,另一个是 REQUEST 表,其中包含所有用户向所有用户发出的好友请求。我想列出登录我的应用程序的一位用户的所有 friend 。

USER 表属性是,

id | uname   | passwd  | fname | e mail  | dob  | mobileno |  habbits | tastes | profession | image  
11 | nagaraj | *****   | naga  | ng@gml  | 3/94 | 998345   | singing  | sports | teacher  
12 | chiraag | ******* | chiru | ch@gml  | 2/93 | 894617   | writing  | music  | student

同样,REQUEST 表属性是,

rqstTO | rqstFM  | fname   | e mail | mobile | status   
chirag | nagaraj | nagaraj | ng@gml | 99821  | accepted  

表格看起来像这样。现在我想显示 friend 的详细信息(来自 USER 表),仅显示那些接受登录用户请求的 friend 。输出可能是多个用户。需要满足的条件是

  1. friend 的所有详细信息(来自用户表)

  2. rqstFM 应该是登录的用户,rqstTO 必须是他向其发送请求的好友(因为请求表包含所有用户的请求详细信息) )

  3. status=accepted(他们必须已接受请求)

我编写的查询是

SELECT * 
FROM user 
WHERE habits='singing' AND uname = ( 
    SELECT rqstTO 
    FROM request 
    WHERE rqstFM ='"+username+"' AND status='Accepted'
);

(这里+username+是从HTML FORM标签获得的登录者的用户名)。我不断收到的错误是“子查询返回多行”,但我确实需要多行,因为登录用户可能已向许多人发送了请求,并且在所有接受其请求的人中,他们的详细信息需要从用户表中显示。请更正我的查询或针对我的问题提供适当的查询

最佳答案

您需要使用 IN 而不是 =:

您可以按如下方式使用:

SELECT * FROM user 
WHERE habits='singing' AND uname IN 
( SELECT rqstTO FROM request WHERE rqstFM ='"+username+"' AND status='Accepted');

但是,由于性能问题,不建议使用子查询。您应该使用 JOIN

重写查询

您可以像下面这样使用“JOIN”:(我还没有测试过)

SELECT u.* FROM user u
JOIN request r ON u.uname = r.rqstTO 
WHERE u.habits='singing' AND r.rqstFM ='"+username+"' AND r.status='Accepted';

关于mysql错误: "subquery returns more than one row" but i need more than one row from subquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30298059/

相关文章:

使用 Join 的 MySQL 数据透视表

java - JDBI对象参数

php - 具有数据库读/写功能的 PHP 骰子滚子

MySQL "KEY"关键字

java - 在 JDBC 中将值插入 BLOB 类型

mysql - SQL 语句中的 SQL 语句

mysql - 通过比较两个表更新sql中的查询

php - 如何在单个查询中从多对多关系数据库获取博客文章和类别?或者我应该吗?

MySQL 查询中的星号

java - Android 到 Web 服务器问题