如何连接或离开连接三个表来从其中一个表中获取一段数据?

时间:2013-10-16 19:05:16

标签: php mysql sql join

我有一个用户表,一个作业表和一个文件表;确切的表名是user_tablejobsfiles

files表和jobs表有一个公共字段,jobs表和users表有一个公共字段,但是所有3都没有公共字段。因此,文件表的jobid等于id来自作业表,作业表的userid等于来自用户表的userid

示例记录

files table

id    name        path                jobid
-------------------------------------------
7     test.gif    uploads/test.gif    130

jobs table

id     userid    ponumber    date
------------------------------------------------
130    1013      2322        10/14/2013 2:55:1pm

user_table table

userid    username    email              fname    sname
-------------------------------------------------------
1013      username    email@email.com    first    last

文件7属于作业130,作业130属于用户1013.因此,当在页面上显示文件时,我还要显示文件的所有者,但这是两个表格。

我该怎么做?我没有尝试任何东西,因为我是MySQL编程新手。如果我想尝试猜测某些东西,它可能会是这样的:

SELECT *
FROM user_table u
INNER JOIN jobs j USING (userid)
LEFT JOIN files f ON j.id = f.jobid

这可能是如此疯狂的猜测,甚至不值得一提。

3 个答案:

答案 0 :(得分:3)

好吧,如果所有用户都有作业,并且所有作业都有文件,或者您只希望向用户显示包含文件的作业,那么

SELECT *
FROM user_table u
INNER JOIN jobs j ON j.id=u.userID
INNER JOIN files f ON j.id = f.jobid

会这样做。

如果所有用户不要有作业且所有作业不要都有文件,或者您想要向所有用户展示,无论他们是否有文件作业那么

SELECT *
FROM user_table AS u
LEFT JOIN jobs AS j ON j.id=u.userID
LEFT JOIN files AS f ON j.id = f.jobid

会这样做。

HERE描述了可能有助于您更好地理解连接的连接描述。

答案 1 :(得分:1)

SELECT user_table.username, files.*
FROM files 
INNER JOIN jobs ON files.jobid = jobs.id
INNER JOIN user_table ON jobs.userid = user_table.userid

答案 2 :(得分:1)

SELECT files.id, files.name, jobs.id, user_table.username
FROM files LEFT JOIN jobs
ON files.id = jobs.id LEFT JOIN user_table
ON jobs.userid = user_table.userid