【问题标题】:SQL if pivot table is empty = no resultSQL 如果数据透视表为空 = 无结果
【发布时间】:2020-05-01 22:55:48
【问题描述】:

我在 mysql 上创建了这个简单的数据库,并使用我的“工作”数据透视表中的数据,我得到了预期的结果:

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

但是现在,如果我的数据透视表是空的,我会得到 NO RESULT,因为我至少期望我的 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 |
+--------+---------+

【问题讨论】:

    标签: mysql sql pivot-table


    【解决方案1】:

    使用“左外连接”:

    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;
    

    【讨论】:

      【解决方案2】:

      你似乎想要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

      【讨论】:

      • 感谢您使用不同语法的快速回答。我将坚持 PHP 开发人员的第一个答案。谢谢
      【解决方案3】:

      在某些情况下,您需要为列制作一个表格。

      我想要一张有 24 列的表格,每小时一列。在输出中,我会将按天 + 小时分组的操作计数。当一个小时内没有任何动作时,我想要空白,而不是零。 (空白比“0”更突出。)

      为了实现这一点,我构建了一个只有 0..23 的表格。

      SELECT ...
          FROM seq_0_to_23 AS hours
          LEFT JOIN the_data ON ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-08
        • 2015-02-27
        • 2018-02-09
        • 2020-10-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多