多个SQL JOIN语句

多个SQL JOIN语句

问题描述:

我必须从两个表进行查询,因此,例如这里是我的表结构为“学生”表:多个SQL JOIN语句

------------------------------------------- 
id | Name | mom_job_id | dad_job_id 
------------------------------------------- 
1 | Test1 | 1   | 2 
2 | Test2 | 3   | 1 
------------------------------------------- 

,我有“工作”表是这样的:

--------------------------- 
id | job_name 
--------------------------- 
1 | designer 
2 | writer 
3 | programmer 
--------------------------- 

我要选择对学生的表中的记录,并与JOB_NAME更换“工作表”

我已经试过此查询“mom_job_id”和“dad_job_id”:

SELECT student.id, job.job_name as mom_job, job.job_name as dad_job 
FROM student 
INNER JOIN job ON mom_job_id = job.id 
WHERE id=1 

该查询做工精细,但爸爸的工作被设置为相同的妈妈的工作,所以我再添INNER JOIN,使查询,像这样:

SELECT student.id, job.job_name as mom_job, job.job_name as dad_job 
FROM student 
INNER JOIN job ON mom_job_id = job.id 
INNER JOIN job ON dad_job_id = job.id 
WHERE id=1 

的查询工作,但没有返回任何记录。那么我该如何解决这个问题?我相信问题来自job.id

+0

你怎么没有得到一个模棱两可你的where子句出现列错误? – RandomUs1r 2013-05-10 15:28:10

你已经接近这个了,每次加入时只给一个工作表一个别名。

SELECT s.id, job_mom.job_name as mom_job, job_dad.job_name as dad_job 
FROM student s 
INNER JOIN job job_mom ON s.mom_job_id = job_mom.id 
INNER JOIN job job_dad ON s.dad_job_id = job_dad.id 
WHERE s.id=1 

在作业表的连接不返回行,你仍然要出示学生表中的数据,可以使用LEFT事件JOIN:

SELECT s.id, job_mom.job_name as mom_job, job_dad.job_name as dad_job 
FROM student s 
LEFT JOIN job job_mom ON s.mom_job_id = job_mom.id 
LEFT JOIN job job_dad ON s.dad_job_id = job_dad.id 
WHERE s.id=1 
+0

+1。 。我喜欢你桌上的别名。 – 2013-05-10 15:31:42

+0

谢谢@JoachimIsaksson。编辑。 – Aaron 2013-05-10 15:31:50

+0

@ BryceAtNetwork23完美地工作,但是当学生表上的dad_job或mom_job未在作业表中列出时,它不会返回任何记录。我应该使用另一个连接吗? – 2013-05-10 16:01:07

因为您引用了两次,所以您需要别名作业表。

使用LEFT OUTER JOIN将始终为学生表中的每个匹配记录拉一行。如果作业表中没有匹配的记录,那么该列将返回NULL的值。

SELECT s.id, mom.job_name as mom_job, dad.job_name as dad_job 
FROM student s 
    LEFT OUTER JOIN job mom ON s.mom_job_id = mom.id 
    LEFT OUTER JOIN job dad ON s.dad_job_id = dad.id 
WHERE s.id = 1