【问题标题】:Need help with a simple Join需要简单的加入帮助
【发布时间】:2010-07-13 09:40:31
【问题描述】:

喂

正确解决问题。

SELECT *,t.id AS threadid FROM threads t 
LEFT JOIN players p on p.id = t.last_poster 
WHERE t.boardid = $boardid

我在线程中有两个字段posterid 和lastposterid。哪个是线程启动者/最后一个海报的 ID。我想做的是从玩家表中获取他们的名字。

但是怎么做呢?

【问题讨论】:

    标签: sql join left-join inner-join


    【解决方案1】:

    你只需要加入你的玩家桌两次,像这样。

    SELECT
        threads.*,
        starterPlayer.*,
        lastPosterPlayer.*
    FROM
        threads
    LEFT OUTER JOIN
        players starterPlayer
    ON
        starterPlayer.id = threads.posterid
    LEFT OUTER JOIN
        players lastPosterPlayer
    ON
        lastPosterPlayer.id = threads.lastposterid
    

    【讨论】:

      【解决方案2】:

      您可以两次加入同一个表并为该表指定不同的别名。

      这假定总会有第一个和最后一个海报,如果是这种情况,那么您需要INNER JOIN 而不是LEFT JOIN,您需要更改选择语句以获取相关字段。

      SELECT t.id AS threadid, playerFirst.name AS FirstPoster, playerLast.name as LastPoster 
      FROM threads t
      INNER JOIN
         players playerFirst ON playerFirst.id = t.posterid
      INNER JOIN 
         players playerLast ON playerLast.id = t.lastposterid
      

      【讨论】:

        【解决方案3】:

        怎么样...

        SELECT *,
            (SELECT name
                 FROM players
                 WHERE players.id = threads.posterid) AS poster,
            (SELECT name
                 FROM players
                 WHERE players.id = threads.lastposterid) AS last_poster
            FROM threads;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-07
          • 1970-01-01
          • 2012-03-16
          相关资源
          最近更新 更多