我有一张工作台,另一张办公室。一名工人可以在不同的办公室或任何办公室。
表格如下:
**Workers**
ID | Name
1 | Ned
2 | James
3 | Tyrion
**WorkersOffices**
WorkerID | OfficeID
1 | 18
1 | 17
2 | 18
我想加入这两个表来得到这样的东西:
**Joined**
ID | Name | OfficeID
1 | Ned | 18
1 | Ned | 17
2 | James | 18
3 | Tyrion |
我已尝试过以下内容,但它只为工人加入一个办公室。
SELECT * FROM workers w
LEFT JOIN workersoffice wo on w.id = wo.workerid
如何获得此结果?
答案 0 :(得分:0)
您必须使用LEFT JOIN:
SELECT * FROM workers w
LEFT JOIN workers_office wo on w.id = wo.worker_id
如果该工作人员存在,那么它基本上会占用workers
表和加入办公室的所有行。
与问题无关的另一件事是使用表格的单数名称,您可以在此SO answer
中阅读更多相关信息。答案 1 :(得分:0)
这就是你需要的:
select w.id,w.name,wo.office_id from workers w left join WorkerOffices wo on w.id = wo.worker_id;
结果集:
+------+--------+-----------+
| id | name | office_id |
+------+--------+-----------+
| 1 | Ned | 18 |
| 1 | Ned | 17 |
| 2 | James | 18 |
| 3 | Tyrion | NULL |
+------+--------+-----------+
答案 2 :(得分:0)
@Uri您在加入后的查询只使用“按工作人员分组或命名”。
这肯定会帮助你。你的加入是正确的。那么你就可以得到没有工人位置的鸡蛋。