Sql 从多个子表获取数据
workers |父表Sql 从多个子表获取数据,sql,Sql,workers |父表 -------------------------------------------------| name | last name | job_id (FK) | chore_id (FK) | -------------------------------------------------| John | Johnson | 1 | 1 | ----------------------------------
-------------------------------------------------|
name | last name | job_id (FK) | chore_id (FK) |
-------------------------------------------------|
John | Johnson | 1 | 1 |
-------------------------------------------------|
Peter | Peterson | 2 | 2 |
-------------------------------------------------|
作业|标题|子表
------------------------|
job_id (PK) | job_title |
------------------------|
1 | Manager |
------------------------|
2 | Director |
------------------------|
----------------------------|
chore_id (PK) | chore_title |
----------------------------|
1 | Clean |
----------------------------|
2 | Dishes |
----------------------------|
家务|儿童桌
------------------------|
job_id (PK) | job_title |
------------------------|
1 | Manager |
------------------------|
2 | Director |
------------------------|
----------------------------|
chore_id (PK) | chore_title |
----------------------------|
1 | Clean |
----------------------------|
2 | Dishes |
----------------------------|
上面是我的数据库
我从PHP中的workers获取数据以显示它。我想显示子表中的作业标题,而不是父表中的作业id
我通过以下方式实现了这一目标:
SELECT name, last_name, job_title
FROM workers, job_titles
WHERE job_titles.job_id=workers.job_id
在这个查询中,我还希望获取chore_标题而不是chore_id,这意味着我将同时从两个子表中获取
正确的方法是什么?使用多个联接
SELECT w.name, w.last_name, j.job_title, c.chore_title
FROM workers AS w
JOIN job_titles AS j ON w.job_id = j.job_id
JOIN chores AS c ON w.chore_id = c.chore_id
使用联接尝试此操作,您可以使用此
SELECT workers.name, workers.last_name, job_titles.job_title,chores.chore_title
FROM workers
LEFT JOIN job_titles
ON workers.job_id = job_titles.job_id
LEFT JOIN chores
ON workers.chore_id = chores.chore_id
或者没有加入你的方法
SELECT workers.name, workers.last_name, job_titles.job_title, chores.chore_title
FROM workers, job_titles, chores
WHERE workers.job_id=job_titles.job_id AND workers.chore_id = chores.chore_id
您可以使用多种方法,Barmar的答案也可以接受。添加另一个连接。顺便说一句,您应该学习如何使用ANSI JOIN而不是老式的逗号分隔表列表。@Barmar我明白了。你能举个例子说明在这种情况下如何使用ANSI JOIN吗?谢谢
SELECT w.*,j.*,c.*
FROM workers w join job_titles j on w.job_id =j.job_id
join chores c on w.chore_id =c.chore_id
WHERE j.job_title ='Manager'