/ / MYSQL link Join zu mehreren Spalten - mysql, links-Join

MYSQL Links Join zu mehreren Spalten - mysql, links-Join

Ich versuche, die Ergebnisse einer Eins-zu-viele-Beziehung auszuwählen und die Ergebnisse in mehreren Spalten zu erhalten. Meine Tabellen sehen so aus:

Tischbenutzer:

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

Tabellenpositionen:

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

Tabelle user_locations:

+----+---------+-------------+
| 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 |
+----+---------+-------------+

Das Ergebnis, das ich versuche zu bekommen, ist:

+---------+-------+------------+------------+------------+
| 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 |
+---------+-------+------------+------------+------------+

Ich habe mehrere Abfragen mit linkem Join und Gruppierung probiert, aber ich scheine nur den ersten Ort zu bekommen.

Danke im Voraus.

Antworten:

0 für die Antwort № 1

Die Änderung der Datenstruktur und -orientierung wird allgemein als Transponiert bezeichnet. Wenn Sie in dieser Transponierung dynamische Werte hinzufügen möchten, wird dies als PIVOT bezeichnet.

Sehen Sie, ob das hilft: Transponiere MySQL-Zeilen als Spaltennamen - DYNAMIC https://dba.stackexchange.com/questions/89681/transpose-mysql-rows-as-column-names-dynamic

MySQL-Pivot-Tabelle: MySQL-Pivot-Tabelle


0 für die Antwort № 2

Ich habe versucht, so schnell wie möglich zu diesem StoredPorcedure für dich zu schreiben. Es wird Zeilen in Spalten konvertieren.

Trotzdem müssen Sie Nullen in diesem SP verwalten, aber ich bin mir sicher, dass es Ihnen eine bessere Idee gibt, Ihre Anforderungen zu erfüllen.

Überprüfen Sie dies GEIGE

CODE

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 ;

P.S.

Nehmen Sie Änderungen daran vor, wie Sie es brauchen, da es Ihnen nicht genau das gewünschte Ergebnis zurückgibt.