【问题标题】: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;