MySQL. Получить данные из многих таблиц с общим столбцом - PullRequest
1 голос
/ 31 марта 2020

В моей базе данных есть следующие таблицы:

TABLE_EMPLOYEES
_________________________________________________
| id |   name  |  last name  |       email       |
-------------------------------------------------
|  1 | Henry   | Smith       | henry@gmail.com   |
|  2 | Scarlet | Rogers      | scarlet@gmail.com |
|  3 | John    | Adams       | john@gmail.com    |
=================================================

TABLE_AVATAR

_________________________________
| id | employee_id | avatar_name |
---------------------------------
| 99 | 1           | henry84     |
|100 | 1           | henry84_    |
|101 | 1           | henry84-    |
|442 | 2           | scarlet99   |
|924 | 3           | john-007    |
|926 | 3           | john-008    |
=================================

TABLE_DOCUMENTS

___________________________________
| id | employee_id | document_name |
-----------------------------------
|124 | 2           | cv.doc        |
|125 | 2           | resume.pdf    |
|126 | 2           | scan-01.jpg   |
|127 | 2           | dl.jpg        |
|396 | 3           | cv-john.doc   |
|397 | 3           | scan-2403.jpg |
===================================

Моя цель - извлечь все данные из всех таблицы для каждого сотрудника. TABLE_EMPLOYEES будет содержать 1 строку на запись (мне нужны все данные), TABLE_AVATAR может содержать много строк на запись (мне нужна только самая новая (id des c)), а TABLE_DOCUMENTS может содержать много строк на запись, а также ни одной на все (мне нужно получить все строки в записи, если есть). Я знаю, что могу присоединяться к таблицам по employee_id, но у меня есть только одна запись из TABLE_AVATAR и все записи из TABLE_DOCUMENTS.

Есть предложения?

Спасибо, Карлос

1 Ответ

0 голосов
/ 31 марта 2020

Здесь я использовал групповую функцию GROUP_CONCAT, чтобы получить document_ids в один столбец.

    select employee.*,GROUP_CONCAT(documents.document_name)  document_name,(SELECT MAX(id) as avatar_id from zz2  where zz2.employee_id = employee.id ) from zz1 employee LEFT JOIN zz3 documents on documents.employee_id = employee.id  group by

employee.id

Это даст вам результат, упомянутый ниже.

  id   name   last name   mail                documents            avatar_id
  1   henry    smith     henry@gmail.com          NULL               101
  2   scarlet  rogers    test2@gmail.com   3.jpg,4.jpg,1.jpg,2.jpg   442           
  3   jon      adam      test3@gmail.com     5.jpg,6.jpg             926    

Просто замените имена таблиц на zz1, zz2, zz3. Я думаю, это поможет вам решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...