同一个表作为两个相同的列

时间:2014-05-29 10:08:29

标签: mysql

我有两张桌子: 1-messages_system_data

    CREATE TABLE IF NOT EXISTS `messages_system_data` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `msgId` int(11) NOT NULL,
  `theSubject` varchar(250) NOT NULL,
  `sentMemId` int(11) NOT NULL,
  `receiveMemId` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) 

2 - 成员

CREATE TABLE IF NOT EXISTS `members` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `theName` varchar(150) NOT NULL,
  PRIMARY KEY (`id`),
) 

我需要检索发件人邮件名称和接收者按摩名称。 messages_system_data保留发送方和接收方ID的ID。我应该只使用一个sql命令。我这样写:

SELECT messages_system_data.theSubject, ?(here should be receiver ),?( sender name)  FROM  messages_system_data,members WHERE messages_system_data.sentMemId=members.id AND messages_system_data.receiveMemId=members.id LIMIT :limit, :offset

在这个sql中有两个成员表连接,我如何才能到达theName列的这个成员表?

1 个答案:

答案 0 :(得分:0)

您的问题似乎是您不方便在同一查询中两次加入给定的表。在我看来,如果你使用显式连接语法而不是逗号语法,那么对这种事情(以及一般的连接)更容易准确。

SELECT
    messages_system_data.theSubject,
    sender.theName AS sender_name,
    recipient.theName AS recipient_name
FROM
    messages_system_data
    JOIN members AS sender ON messages_system_data.sentMemId = sender.id
    JOIN members AS recipient ON messages_system_data.receiveMemId = recipient.id

顺便提一下,为什么members.idBIGINTmessages_system_data.sentMemIdmessages_system_data.receiveMemIdINT?它们应该是相同的类型。