Получить список значений в один столбец через внешний ключ - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть две таблицы «образец» и «процессы», и я хочу получить все процессы данного образца в одном столбце.

Пример таблицы «образец»:

----------------------------------------
|           Sample Table               |
|                                      |
|id  | timestamp  | other columns...   |
 --------------------------------------
|1   | 24/04/1994 | ...                |
|2   | 25/04/1994 | ...                |
|... |...         | ....               |  
----------------------------------------

Пример таблицы «процессы»:

----------------------------------------
|          Processes Table             |
|                                      |
|id  | sample_id  | process_name       |
 --------------------------------------
|1   | 1          | facebook           |
|2   | 1          | tinder             |
|3   | 1          | clash royale       |
|4   | 2          | uno                |
|5   | 2          | whatsapp           |
|... |...         | ....               |  
----------------------------------------

Результат:

------------------------------------------------------------
|          Result Table                                     |
|                                                           |
|sample_id  | timestamp  | processes                        |
 -----------------------------------------------------------
|1          | 24/04/1994 | [facebook, tinder, clash royale] |
|2          | 25/04/1994 | [uno, whatsapp]                  |
------------------------------------------------------------

Возможно ли эток этому через SQL-запрос?КАК?

PS: Я знаю, что могу получить все процессы данного образца с помощью:

SELECT sample_id, timestamp, process_name
FROM sample, processes
WHERE sample.id = processes.sample_id

Но это дает мне слишком много ненужных строк

1 Ответ

0 голосов
/ 19 декабря 2018

Вы можете попробовать использовать GROUP_CONCAT с функцией CONCAT.

Схема (MySQL v5.7)

CREATE TABLE sample(
   id INT,
   timestamp DATE

);




INSERT INTO sample VALUES (1,'1994/04/24'); 
INSERT INTO sample VALUES (2,'1994/04/25'); 

CREATE TABLE processes(
   id INT,
   sample_id INT,
  process_name VARCHAR(50)

);


INSERT INTO processes VALUES (1   ,1,'facebook');
INSERT INTO processes VALUES (2   ,1,'tinder');
INSERT INTO processes VALUES (3   ,1,'clash');
INSERT INTO processes VALUES (4   ,2,'uno');
INSERT INTO processes VALUES (5   ,2,'whatsapp');

Запрос # 1

SELECT sample_id, timestamp, CONCAT('[',GROUP_CONCAT(process_name),']') processes
FROM sample JOIN processes ON sample.id = processes.sample_id
GROUP BY sample_id, timestamp;

| sample_id | timestamp  | processes               |
| --------- | ---------- | ----------------------- |
| 1         | 1994-04-24 | [tinder,clash,facebook] |
| 2         | 1994-04-25 | [uno,whatsapp]          |

Просмотр на БД Fiddle

ПРИМЕЧАНИЕ

Я быиспользуйте JOIN вместо ,, потому что JOIN имеет отношение подчеркивания при соединении двух таблиц.

...