我在mysql上创建了这个简单的数据库,使用"Work"数据透视表中的数据,我用获得了预期的结果
SELECT emp_name, dept_name
FROM Employee e
INNER JOIN Work w ON e.emp_id=w.emp_id
INNER JOIN Department d ON w.dept_id=d.dept_id;
+----------+-----------+
| emp_name | dept_name |
+----------+-----------+
| James | Sales |
| Jack | Marketing |
| James | Finance |
| Tom | Marketing |
+----------+-----------+
但现在,如果我的数据透视表是空的,我不会得到任何结果,至少我的emp_name列表:
+----------+
| emp_name |
+----------+
| James |
| Jack |
| Henry |
| Tom |
+----------+
===>该查询什么???谢谢你的帮助!
+--------+----------+--------+ Employee table
| emp_id | emp_name | salary |
+--------+----------+--------+
| 1 | James | 2000 |
| 2 | Jack | 4000 |
| 3 | Henry | 6000 |
| 4 | Tom | 8000 |
+--------+----------+--------+
+-------+-----------+ Department table
|dept_id| dept_name |
+-------+-----------+
| 1 | Sales |
| 2 | Marketing |
| 3 | Finance |
+-------+-----------+
+--------+---------+ Work table
| emp_id | dept_id |
+--------+---------+
| 1 | 1 |
| 2 | 2 |
| 1 | 3 |
| 4 | 2 |
+--------+---------+
使用"左外部联接":
SELECT emp_name, dept_name
FROM Employee e
LEFT JOIN Work w ON e.emp_id=w.emp_id
LEFT JOIN Department d ON w.dept_id=d.dept_id;
您似乎想要left join
:
SELECT emp_name, dept_name
FROM Employee e LEFT JOIN
Work w
ON e.emp_id = w.emp_id LEFT JOIN
Department d
ON w.dept_id = d.dept_id;
请注意,这仍然返回两列,但第二列是NULL
。
在某些情况下,您需要为列制作一个表。
我想要一张24列的桌子,每小时一列。在输出中,我会将动作的计数按天+小时分组。当一个小时内没有任何行动时,我想要的是空白,而不是零。(空白比"0"更突出。(
为了实现这一点,我构建了一个只有0..23的表。
SELECT ...
FROM seq_0_to_23 AS hours
LEFT JOIN the_data ON ...