【问题标题】:MySQL join on the same fieldMySQL加入同一字段
【发布时间】:2012-01-07 10:08:23
【问题描述】:

我有两张桌子:

  1. 消息 - 具有以下结构

    身份证
    发件人ID
    接收者ID
    message_text

  2. 用户 - 具有以下结构

    身份证
    昵称

我需要加入这两个表,所以我得到这样的结果:

message_id, sender_nickname, receiver_nickname, message_text

sender_id 始终设置。问题是我还需要 receiver_id 为 0 的消息,因此在 user 表中找不到 receiver_id

有人可以帮我吗?

【问题讨论】:

    标签: mysql join


    【解决方案1】:
    select 
    m.id,
    u1.nickname as sender,
    u2.nickname as receiver,
    m.message_text
    from messages as m
    left join users as u1 on u1.id = m.sender_id
    left join users as u2 on u2.id = m.receiver_id
    

    【讨论】:

      【解决方案2】:

      可能是这样的:

      SELECT m.id AS message_id
            ,u1.nickname AS sender_nickname
            ,u2.nickname AS receiver_nickname
            ,m.message_text
      FROM   messages m
      LEFT   JOIN users u1 ON u1.id = m.sender_id
      LEFT   JOIN users u2 ON u2.id = m.receiver_id
      

      LEFT [OUTER] JOIN 保证如果右侧表没有匹配值,则不会排除左侧表。

      【讨论】:

        【解决方案3】:
        SELECT ...
        FROM messages
        INNER JOIN users AS senders ON senders.id = messages.sender_id
        LEFT JOIN users AS receivers ON receivers.id = messages.receiver_id
        

        当没有数据时,保持receiver_id 列为NULL 而不是INT 值0。

        【讨论】:

          【解决方案4】:

          在将消息表连接到接收者 ID 上的用户表时,您应该使用左外连接。

          【讨论】:

            【解决方案5】:

            你可以在里面使用outerjoin

            select 
            m.id as message_id, us.nickname as sender_nickname, ur.nickname as receiver_nickname, m.message_text as message_text
            from messages m join users us on us.id = m.sender_id
            left outer join users ur.id = m.receiver_id
            where m.id = <your message id>
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-04-26
              • 2017-12-11
              • 2013-01-24
              • 1970-01-01
              • 2016-01-24
              • 2011-07-04
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多