【问题标题】:SQL: Joining 2 tables twice, same right side columnSQL:加入 2 个表两次,相同的右侧列
【发布时间】:2026-01-24 04:00:02
【问题描述】:

SQL 大师。

在我的 MySQL 数据库中有如下表:

Users
----------------------------
UserID  | UserNickName | ...
(PK)    |              |     
----------------------------
1       | Lister       | ...
2       | Rimmer       | ...
3       | Kryten       | ...
----------------------------

Events
-----------------------------------------------------------
EventID | EventCreatedByUserID | EventEdittedByUserID | ...
(PK)    | (FK Users.UserID)    | (FK Users.UserID)    |
-----------------------------------------------------------
1       | 1                    | 2                    | ...
2       | 2                    | 3                    | ...
-----------------------------------------------------------

使用以下查询,我可以选择创建事件的事件条目和用户昵称:

SELECT EventID, ..., UserNickName
FROM Events
   JOIN Users
      ON Users.UserID = Events.EventCreatedByUserID

i.e.
Event #1 | Lister
Event #2 | Rimmer

但是查询如何选择事件条目,包括。创建和最后编辑事件的用户昵称看起来像?

i.e.
Event #1 | Lister | Rimmer
Event #2 | Rimmer | Kryten

感谢您的帮助。

【问题讨论】:

    标签: mysql sql-server select join


    【解决方案1】:

    只需将您的联接链接在一起。您必须在用户表上创建一个别名,因为您使用了两次。

    SELECT EventID, ..., CreateUser.UserNickName, EditUser.UserNickName 
    FROM Events
    JOIN Users CreateUser
    ON CreateUser.UserID = Events.EventCreatedByUserID
    JOIN Users EditUser
    ON EditUser.UserID = Events.EventEditedByUserID
    

    【讨论】:

      【解决方案2】:

      怎么样:

      SELECT e.*, u1.UserNickName AS createdBy, u2.UserNickName AS EditedBy
          FROM Events e
          LEFT JOIN Users u1 ON e.EventCreatedByUserID=u1.UserID
          LEFT JOIN Users u2 ON e.EventEdittedByUserID=u2.UserID
          WHERE ... your additional clauses
      

      【讨论】:

        最近更新 更多