2012-07-24 67 views
1

服用几次信息这是尝试SQL用户我想很简单:SQL查询从表中

给出如下表:

表用户

id Name 
    1 | Stephan 
    2 | Marion 
    3 | Jonathan 
    4 | Morgan 

表信息

id| sender | reveiver | message 
    1| 2 |  4 | "hello world!" 

您如何处理您的请求以获取以下内容(仅限于一个sql请求t):

id| sender | reveiver | message  | sender.username | receiver.username 
    1| 2 |  4 | "hello world!" |  Marion |  Morgan 

非常感谢!

+1

实验过Sql用户? :) – mellamokb 2012-07-24 13:34:15

+0

使用SQL连接!谨防加入缓慢...... – MaX 2012-07-24 13:36:15

+0

lol是的,对于非常有经验的sql用户。 – 2012-07-24 14:28:05

回答

1
select m.id, sender, reveiver, message, 
    sender.Name as sender_username, receiver.Name as receiver_username 
from messages m 
inner join users sender on sender.id = m.sender 
inner join users receiver on receiver.id = m.reveiver 
+0

准确!非常感谢! – 2012-07-24 14:49:00

2

尝试

select m.id, sender, receiver, message, sender.name, receiver.name 
from messages m 
left outer join users sender on sender.id = m.sender 
left outer join users receiver on receiver.id = m.receiver 
+1

+1这里是一个工作演示:http://www.sqlfiddle.com/#!2/71aa1/6 – mellamokb 2012-07-24 13:38:55

+1

你有一个几个错别字虽然。在连接中应该是'receiver.id = m.reveiver'(复制OP的原始错字),而'id'不明确,因为它定义在多个表上,所以需要id =>'m.id'。此外,该列是“sender.Name”和“receiver.Name”,而不是“用户名”。 – mellamokb 2012-07-24 13:40:14

+0

感谢提示。 – 2012-07-24 13:48:03

1
SELECT 
    m.id 
    , m.sender 
    , m.receiver 
    , m.message 
    , s.name 
    , r.name 
FROM 
    messages m 
    , INNER JOIN names s ON (s.id = m.sender) 
    , INNER JOIN names r ON (r.id = m.receiver) 
1
select 
     m.id 
    , m.sender 
    , m.receiver 
    , m.message 
    , su.user 
    , ru.user 
    from message m 
    join user su on (su.id = m.sender) 
    join user ru on (ru.id = m.receiver) 

我相信有这样做的更有效的方式,但是这可能是最简单的。