Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从多个子表获取数据_Sql - Fatal编程技术网

Sql 从多个子表获取数据

Sql 从多个子表获取数据,sql,Sql,workers |父表 -------------------------------------------------| name | last name | job_id (FK) | chore_id (FK) | -------------------------------------------------| John | Johnson | 1 | 1 | ----------------------------------

workers |父表

-------------------------------------------------|
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'