Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 需要简单连接的帮助吗_Sql_Join_Left Join_Inner Join - Fatal编程技术网

Sql 需要简单连接的帮助吗

Sql 需要简单连接的帮助吗,sql,join,left-join,inner-join,Sql,Join,Left Join,Inner Join,爱 对问题的正确认识 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。我想做的是从球员表中得到他们的名字 但是怎么做呢?你只需要加入你的玩家表两次,就像这样 SELECT threads.*,

对问题的正确认识

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。我想做的是从球员表中得到他们的名字


但是怎么做呢?

你只需要加入你的玩家表两次,就像这样

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

你只需要加入你的玩家表两次,就像这样

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
那么

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;
那么

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;

您可以两次连接到同一个表,并为该表指定不同的别名

这假定始终存在第一个和最后一个海报,如果是这种情况,则需要
内部连接
而不是
左连接
,则需要更改select语句以获取相关字段

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

您可以两次连接到同一个表,并为该表指定不同的别名

这假定始终存在第一个和最后一个海报,如果是这种情况,则需要
内部连接
而不是
左连接
,则需要更改select语句以获取相关字段

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