2012-02-11 55 views
0

我的數據庫結構是這樣的:簡單SQL接合操作

Members table 

    |id|username|... 

    Messages table 
    |id|fromId|toId|content 

在消息表ID是指消息ID,在成員它指的是用戶ID(這是相同的ID在fromId和toId)。我想要做的FROM消息的連接查詢的WHERE拉動以下結果ID = SOME_MESSAGE_ID設置

|id(message id)|fromId|fromUsername(username that corresponds to fromId)|toId|toUsername(username that corresponds to toId)|content 

任何幫助,將不勝感激。

回答

1

加入成員表兩次,但使用不同的別名:

SELECT 
    messages.id, 
    messages.fromId, 
    from_member.username AS fromUsername, 
    messages.toId, 
    to_member.username AS toUsername, 
    messages.content 
FROM messages 
JOIN members AS from_member ON from_member.id = message.fromId 
JOIN members AS to_member ON to_member.id = message.toId 
+0

啊,我不知道你可以加入兩次。正是我在找什麼。有一個upvote :) – user974896 2012-02-11 01:08:14

+0

只是一個簡短的說明,使用'JOIN'將導致查詢行爲像一個'INNER JOIN'並且不會返回其中一個成員記錄丟失的郵件。 – 2012-02-11 01:10:07

+0

還有一件事,表名全部小寫,根據安裝數據庫服務器軟件的操作系統,這可能是一個問題。有些區分大小寫。 – 2012-02-11 01:20:27

1

如何:

SELECT `Message`.`id`, 
      `Message`.`fromId`, 
      `From`.`username` AS `fromUsername`, 
      `Message`.`toId`, 
      `To`.`username` AS `toUsername` 
      `Message`.`content` 
FROM  `Messages` AS `Message` 
LEFT JOIN `Members` AS `From` 
ON  `From`.`id` = `Message`.`fromId` 
LEFT JOIN `Members` AS `To` 
ON  `To`.`id` = `Message`.`toId` 
WHERE  `Message`.`id` = 1 

有關SELECT查詢的詳細信息,click here

+0

謝謝。你的LEFT JOIN比上面的JOIN更有效率,還是相同? – user974896 2012-02-11 01:38:46

+0

@ user974896 - 效率不高。唯一真正的區別是'LEFT JOIN'將返回NULL列,而不是返回一行。所以,舉個例子,如果你刪除了一個用戶,'LEFT JOIN'仍然允許你看到這個消息,但是'username'會是'NULL'。 – 2012-02-11 03:51:52