MySQL Соединить 4 таблицы, возвращая только 1 строку - PullRequest
1 голос
/ 11 марта 2020

Извините за мой плохой Engli sh, у меня есть требование получить данные из таблицы mysql 4, но она возвращает только 1 строку.

таблица 1

col_2 в таблице 1 содержит данные цифр c в качестве ссылки из таблицы 2 col_2

+----+-------+---------+
| id | col_1 | col_2   |
+----+-------+---------+
| 1  |   A   |  4      |
| 2  |   B   |  5      |
| 3  |   C   |  6      |
+----+-------+---------+

таблица 2

+----+-------+---------+
| id | col_1 | col_2   |
+----+-------+---------+
| 1  |   A   |  4      |
| 2  |   B   |  5      |
| 3  |   C   |  6      |
| 4  |   C   |  7      |
| 5  |   C   |  8      |
+----+-------+---------+

таблица 3

таблица 3 col_1 имеет цифру c значение таблицы 1 идентификатор, но большая часть темы будет с тем же идентификатором, а col_2 имеет цифру c значение идентификатора из таблицы 4

+----+-------+---------+
| id | col_1 | col_2   |
+----+-------+---------+
| 1  |   1   |  1      |
| 2  |   1   |  2      |
| 3  |   1   |  3      |
| 4  |   2   |  4      |
| 5  |   2   |  5      |
| 6  |   4   |  8      |
| 7  |   4   |  1      |
| 8  |   5   |  2      |
| 9  |   5   |  5      |
| 10 |   5   |  8      |
| 11 |   5   |  9      |
| 12 |   5   |  10     |
+----+-------+---------+

таблица 4

+----+-------+
| id | col_1 |
+----+-------+
| 1  |   A   |
| 2  |   B   |
| 3  |   C   |
+----+-------+

запрос, к которому я запускаю получить данные.

SELECT
    t1.id,
    t1.col_1,
    t2.col_1 as result_0,
    GROUP_CONCAT(t4.col_1) as result
FROM
    table_1 AS t1
LEFT JOIN table_2 AS t2
    ON t2.col_2 = t1.col_2
LEFT JOIN table_3 AS t3
    ON t3.col_1 = t1.id
LEFT JOIN table_4 AS t4
    ON t4.id = t3.col_2
WHERE t1.col_2 > 1
ORDER BY t1.id DESC

, как вы можете видеть, таблица 3 имеет идентификатор в разных таблицах 1 и 4, обе таблицы имеют значения, поэтому я хочу, чтобы запрос возвращал меня, как показано ниже. это означает, что я хочу, чтобы значение из таблицы 4 было разделено запятой.

+----+-----------+-----------+-----------+
| id | result_1  | result_2  | result_3  |
+----+-----------+-----------+-----------+
| 1  |   A       |    A      |    A,B,C  |
| 2  |   B       |    B      |    A,B    |
| 3  |   C       |    C      |    C,B    |  
+----+-----------+-----------+-----------+

ОБНОВЛЕНИЕ: в соответствии с запросом, это скрипта запроса.

SQL Скрипка http://sqlfiddle.com/#! 9 / 3af0af / 1 спасибо

1 Ответ

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

На основе созданной вами скрипки

Все, что вам нужно сделать, это изменить свой запрос на: -

SELECT
    t1.id,
    t1.name,
    t2.role as result_0,
    GROUP_CONCAT(t4.ct) as result
FROM
    table_one AS t1
LEFT JOIN table_tow AS t2
    ON t2.level = t1.level
 JOIN table_three AS t3                       //CHANGED LEFT JOIN TO JOIN
    ON t3.vid = t1.id
LEFT JOIN table_four AS t4
    ON t4.id = t3.cid
WHERE t1.level > 1
group by t1.id ORDER BY t1.id ASC            //ADDED group by t1.id AND CHANGED ORDER BY t1.id DESC TO ORDER BY t1.id ASC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...