2012-02-05 98 views
3

我有未来2个表:MySQL查询问题

 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)我应该向查询添加什么? (我不熟悉的加入/工会和那些其他的东西)

回答

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 
     ) 
+0

我爱stackoverflow.com:D – AndreiBogdan 2012-02-05 19:49:39

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 
) 
+0

这是给我的错误:“ERROR 1242(21000):子查询返回多个1行” – AndreiBogdan 2012-02-05 19:36:24

+1

你是对的,我已经更新了答案相比,它支持的结果 – Gigi 2012-02-05 19:45:38

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 
); 
+0

ERROR 1242(21000)更多:子查询返回多于一行 – AndreiBogdan 2012-02-05 19:38:21

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。

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 
    )