SQL if pivot表为空=无结果



我在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 ...

最新更新