SQL если сводная таблица пуста = нет результата - PullRequest
0 голосов
/ 20 апреля 2020

Я создал эту простую базу данных на 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 |
+----------+-----------+

Но теперь, если моя сводная таблица пуста, я не получить результат, как я ожидаю, по крайней мере, мой список 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 |
+--------+---------+

Ответы [ 3 ]

0 голосов
/ 20 апреля 2020

Похоже, вы хотите 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.

0 голосов
/ 01 мая 2020

В некоторых ситуациях вам необходимо изготовить таблицу для столбцов.

Мне нужна таблица с 24 столбцами, по одному в час. В выводе я бы поставил счет за действия, сгруппированные по дням + часам. Когда через час не было никаких действий, я хотел пустую, а не ноль. (Пробел выделяется больше, чем «0».)

Чтобы достичь этого, я построил таблицу всего с 0..23.

SELECT ...
    FROM seq_0_to_23 AS hours
    LEFT JOIN the_data ON ...
0 голосов
/ 20 апреля 2020

Используйте «левое внешнее соединение»:

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;
...