/ / MYSQL dejó unirse a varias columnas - mysql, left-join

MYSQL dejó unirse a varias columnas - mysql, left-join

Estoy tratando de seleccionar los resultados de una relación uno a varios y obtener los resultados en varias columnas. Mis tablas tienen el aspecto siguiente:

Usuarios de la mesa:

+----+----------+
| id | user     |
+----+----------+
| 1  | jenny    |
| 2  | chris    |
| 3  | harry    |
+----+----------+

Ubicaciones de la mesa:

+----+-------------+
| id | location    |
+----+-------------+
| 1  | New York    |
| 2  | Washington  |
| 3  | Memphis     |
| 4  | Dallas      |
| 5  | Las Vegas   |
+----+-------------+

Tabla de ubicación de usuarios:

+----+---------+-------------+
| id | user_id | location_id |
+----+---------+-------------+
| 1  |       1 |           1 |
| 2  |       1 |           3 |
| 3  |       1 |           5 |
| 4  |       2 |           2 |
| 5  |       2 |           4 |
| 6  |       3 |           4 |
| 7  |       3 |           5 |
| 8  |       3 |           2 |
+----+---------+-------------+

El resultado que estoy tratando de obtener es:

+---------+-------+------------+------------+------------+
| user_id | user  | location_1 | location_2 | location_3 |
+---------+-------+------------+------------+------------+
|       1 | jenny | New York   | Memphis    | Las Vegas  |
|       2 | chris | Washington | Dallas     | NULL       |
|       3 | harry | Dallas     | Las Vegas  | Washington |
+---------+-------+------------+------------+------------+

Intenté varias consultas con unir y agrupar a la izquierda pero parece que solo obtengo la primera ubicación.

Gracias por adelantado.

Respuestas

0 para la respuesta № 1

La estructura de datos y el cambio de orientación generalmente se conoce como Transposición. En esta Transposición, si desea agregar valores dinámicos, se llama PIVOT.

A ver si esto ayuda: Transponer las filas de MySQL como nombres de columna - DINÁMICA https://dba.stackexchange.com/questions/89681/transpose-mysql-rows-as-column-names-dynamic

MySQL tabla dinámica: Tabla pivote de MySQL


0 para la respuesta № 2

Traté de escribirle a este StoredPorcedure lo más rápido posible. Convierte filas en columnas.

Aún necesita administrar nulos en este SP, pero estoy seguro de que le dará una mejor idea para cumplir con sus requisitos.

Mira esto VIOLÍN

CÓDIGO

DELIMITER $$
CREATE PROCEDURE sp_Result()
BEGIN
SET SESSION group_concat_max_len = 500000;

SET @sql = NULL;

SELECT GROUP_CONCAT(DISTINCT
CONCAT(
"MAX(CASE WHEN ul.location_id = ", l.id,
" THEN l.location END) "))

INTO @sql
FROM user_locations ul
INNER JOIN locations l ON ul.location_id = l.id;

SET @sql = CONCAT(
"SELECT ul.user_id, u.user, ", @sql,
" FROM user_locations ul INNER JOIN users u
ON ul.user_id = u.id INNER JOIN locations l ON ul.location_id = l.id GROUP BY ul.user_id, u.user;");

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;

PD

Realice modificaciones según lo que necesite, ya que no le devolverá el resultado exacto que desea.