【问题标题】:MySQL inner join problem or other equal solutionMySQL 内连接问题或其他同等解决方案
【发布时间】:2011-02-07 12:10:57
【问题描述】:

几个小时以来,我一直在研究如何对这些表进行内部连接(此问题的表已简化):

消息有这些字段:

| 身份证 |内容 |

message_relation有这些字段:

| 身份证 | message_id |发件人 ID |接收者 ID |

用户有这些字段:

| 身份证 |姓名 |

我想用这个表做的是通过 receiver_id 为用户选择所有 messages,但也想知道发件人姓名。我尝试过类似的方法:

SELECT *
FROM (
`message_relation`
)
JOIN `message` ON `message`.`id` = `message_relation`.`message_id`
JOIN `user` ON `message_relation`.`receiver_id` = `user`.`id`
WHERE `receiver_id` = '10'

通过这个查询,我只得到了receiver_id 名称,但也无法弄清楚如何在这个查询中找到sender_id。任何帮助将不胜感激!

【问题讨论】:

    标签: database mysql


    【解决方案1】:

    您可以使用表别名多次加入user 表:

    SELECT m.content,
           us.name as 'sender',
           ur.name as 'receiver'
    FROM   message_relation mr
    JOIN   message m ON (m.id = mr.message_id)
    JOIN   user us ON (us.id = mr.sender_id)
    JOIN   user ur ON (ur.id = mr.receiver_id);
    

    【讨论】:

      【解决方案2】:

      替换 '?????'用你的receiver_id:

      SELECT message.id AS mid, message.content AS mcontent, user.name AS uname
      FROM message,message_relation,user
      WHERE
      message_relation.message_id=message.id
      AND message_relation.sender_id=user.id
      AND message_relation.receiver_id='?????'
      

      呸!未经测试,但你明白了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-06
        • 1970-01-01
        • 1970-01-01
        • 2013-09-20
        • 1970-01-01
        • 2020-02-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多