2012-07-24 63 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) 

我相信有這樣做的更有效的方式,但是這可能是最簡單的。