MySQL查询问题

3

我有以下两个表:

     Users
+----+-----------+
| id | user_name |
+----+-----------+
| 18 | Andrei    |
| 19 | Gicu      |
| 20 | Gigel     |
+----+-----------+
         Requests
+----+-----------+---------+
| id | from_user | to_user |
+----+-----------+---------+
|  3 |        18 |      19 |
|  4 |        18 |      20 |
|  5 |        20 |      19 |
+----+-----------+---------+

我需要进行以下查询:

SELECT requests.from_user 
 FROM requests 
  WHERE 
   (SELECT id FROM users WHERE users.user_name='Gicu')=requests.to_user;

返回:

+-----------+
| from_user |
+-----------+
|        18 |
|        20 |
+-----------+

我的问题是如何获取与这些id(18和20)相关联的用户名?我应该在查询中添加什么?(我不熟悉连接/联合和其他东西)

5个回答

3
SELECT
  from.id, from.user_name
FROM Requests AS r
JOIN Users AS from ON from.id = r.from_user
JOIN Users AS to ON to.id = r.to_user
WHERE to.user_name LIKE 'Gicu';

使用子查询应该让你意识到某些问题存在。对于初学者来说,这很少是完成任务的最佳方式。这本书(http://www.sql.co.il/books/tsqlfund2008/)非常适合初学者阅读,尽管写给了MS SQL,但其中98%同样适用于MySQL。


2
SELECT users.user_name FROM users WHERE (SELECT users.id FROM users)=
  (SELECT requests.from_user 
   FROM requests 
   WHERE (SELECT id FROM users WHERE users.user_name='Gicu')=requests.to_user
  )

它给了我一个错误:"ERROR 1242 (21000):子查询返回多行"。 - AndreiBogdan
1
你是对的,我已经更新了答案以支持多个结果。 - Gigi

2
SELECT users.user_name
FROM users
WHERE users.id IN 
        (SELECT requests.from_user 
         FROM requests 
         WHERE 
              (SELECT id 
               FROM users 
               WHERE users.user_name='Gicu')
         =requests.to_user 
        )

1
Try this:

Select u.user_name
from Users u
where u.id = (
    SELECT requests.from_user 
    FROM requests 
    WHERE (SELECT id FROM users WHERE users.user_name='Gicu')=requests.to_user
);

错误 1242 (21000):子查询返回多行 - AndreiBogdan

1

你可以试试这个。

SELECT u.user_name
FROM users u
WHERE u.id IN 
    (SELECT r.from_user 
     FROM requests r
     WHERE 
          (SELECT id 
           FROM users 
           WHERE user_name='Gicu')
     =r.to_user 
    )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接