Mysql - объединение меток и таблицы значений и включение меток без ссылок как null - PullRequest
1 голос
/ 20 июня 2020

Вот уже некоторое время меня беспокоит следующая проблема. В моей базе данных есть две таблицы.

Сначала у меня есть таблица, содержащая метки, ссылочные значения.

| option_id | option_name |
|-----------|-------------|
| 1         | Blue        |
| 2         | Red         |
| 3         | Black       |

Затем у меня есть вторая таблица с фактическими значениями

| record_id | option_id | first_name | profession |
|-----------|-----------|------------|------------|
| 1         | 2         | James      | Clerk      |
| 2         | 2         | Ethan      | Clerk      |
| 3         | 1         | Marian     | Nurse      |
| 4         | 3         | Bob        | Nurse      |
| 5         | 3         | Paul       | Nurse      |

Как я могу объединить эти две таблицы в MySQL, чтобы получить все параметры, перечисленные для каждой из профессий, даже когда нет ссылочного значения, поэтому оно будет отображаться как NULL?

Итак, таблица будет выглядеть примерно так:

| profession | option_name | first_name |
|------------|-------------|------------|
| Clerk      | Blue        | NULL       |
| Clerk      | Red         | James      |
| Clerk      | Red         | Ethan      |
| Clerk      | Black       | NULL       |
| Nurse      | Blue        | Marian     |
| Nurse      | Red         | NULL       |
| Nurse      | Black       | Bob        |
| Nurse      | Black       | Paul       |

Любая помощь приветствуется. Вот пример базы данных

CREATE TABLE options (
  option_id INT,
  option_name TEXT
);

INSERT INTO options VALUES (1, 'Blue');
INSERT INTO options VALUES (2, 'Red');
INSERT INTO options VALUES (3, 'Black');

CREATE TABLE records (
  record_id INT,
  option_id INT,
  first_name TEXT,
  profession TEXT
);

INSERT INTO records VALUES (1, 2, 'James','Clerk');
INSERT INTO records VALUES (2, 2, 'Ethen','Clerk');
INSERT INTO records VALUES (3, 1, 'Marian','Nurse');
INSERT INTO records VALUES (4, 3, 'Bob', 'Nurse');
INSERT INTO records VALUES (5, 3, 'Paul', 'Nurse');

1 Ответ

1 голос
/ 20 июня 2020

Вы можете перечислить профессии из таблицы records, cross join таблицы options, чтобы сгенерировать все возможные комбинации, а затем вывести таблицу records с left join:

select p.profession, o.option_name, r.first_name
from (select distinct profession from records) p
cross join options o
left join records r 
    on  r.option_id = o.option_id 
    and r.profession = p.profession
order by p.profession, o.option_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...