[英]How to join or left join three tables to get a piece of data from one of the tables?
我有一个用户表,一个作业表和一个文件表; 确切的表名是user_table
, jobs
和files
。
文件表和作业表具有一个公共字段,而作业表和用户表具有一个公共字段,但是所有3个都没有一个公共字段。 因此,文件表的jobid
等于jobid
表的id
,而jobs表的userid
等于users表的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
这可能是一个疯狂的猜测,甚至不值得一提。
好吧,如果所有用户都有工作并且所有工作都有文件,或者您只想显示具有文件工作的用户,则
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
会做到的。
这里介绍了连接,可能有助于您更好地了解连接。
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
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.