多个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
你已经接近这个了,每次加入时只给一个工作表一个别名。
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
+1。 。我喜欢你桌上的别名。 – 2013-05-10 15:31:42
谢谢@JoachimIsaksson。编辑。 – Aaron 2013-05-10 15:31:50
@ 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
你怎么没有得到一个模棱两可你的where子句出现列错误? – RandomUs1r 2013-05-10 15:28:10