1

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

files 表和 jobs 表有一个公共字段,jobs 表和 users 表有一个公共字段,但所有 3 个都没有公共字段。所以 files 表有jobid哪个等于idjobs 表,jobs 表有userid哪个等于useridusers 表。

示例记录

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

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

4

3 回答 3

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

会这样做。

这里对连接进行了描述,可能会帮助您更好地理解连接。

于 2013-10-16T19:09:29.260 回答
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
于 2013-10-16T19:09:04.883 回答
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
于 2013-10-16T19:28:25.760 回答