2015-07-24 1 views
3

Je dois créer VIEW dans MySQL qui peut combiner deux tables de telle sorte que pour chaque ligne de la première table, il faut ajouter des colonnes de la deuxième table mais comme les données de ligne doivent être formatées en plusieurs filds avec plusieurs CSV pour chaque ligne.Comment créer View dans MySQL pour combiner les lignes de la deuxième table comme CSM colmuns en premier

Mon approche originale est avec MySQL VIEW mais je n'ai pas réussi à trouver le moyen d'afficher des données de plusieurs lignes de la deuxième table en tant que données de cellule unique CSV dans la table de vue.

Voici quelques exemples:

1st table: gears 
+------------+------------------------+-----------------+ 
| MainGearID | MainGearName   | MainGearType | 
+------------+------------------------+-----------------+ 
|   1 | Main Drive    | Spur   | 
|   2 | Secondary Drive  | Spur   | 
|   3 | Backup Secondary Drive | Hypoid   | 
|   4 | AUX Drive    | Rack and pinion | 
+------------+------------------------+-----------------+ 

2nd table: orbitinggears: 
+----------+------------+--------------+--------------+ 
| OrbitaID | MainGearID | OrbitalType | OrbitalValue | 
+----------+------------+--------------+--------------+ 
|  1 |   1 | Spur   | 112   | 
|  2 |   1 | Spur   | 280   | 
|  3 |   2 | Spur   | 144   | 
|  4 |   2 | Spur   | 248   | 
|  5 |   3 | Helical  | 18   | 
|  6 |   4 | Spur   | 144   | 
+----------+------------+--------------+--------------+ 

Required View: 
+------------+------------------------+-----------------+----------+---------+ 
| MainGearID | MainGearName   | MainGearType | Spur  | Helical | 
+------------+------------------------+-----------------+----------+---------+ 
|   1 | Main Drive    | Spur   | 112,280, |   | 
|   2 | Secondary Drive  | Spur   | 144,248, |   | 
|   3 | Backup Secondary Drive | Hypoid   |   | 18,  | 
|   4 | AUX Drive    | Rack and pinion | 144,  |   | 
+------------+------------------------+-----------------+----------+---------+ 

Est-ce que quelqu'un a une idée comment créer vue de cette façon?

+0

utilisation 'group_concat' – RubahMalam

Répondre

4

Vous pouvez utiliser GROUP_CONCAT avec IF():

CREATE VIEW v6 AS 
SELECT a.MainGearID, a.MainGearName, a.MainGearType, 
    GROUP_CONCAT(IF(b.OrbitalType='Spur',b.OrbitalValue,null)) AS Spur, 
    GROUP_CONCAT(IF(b.OrbitalType='Helical',b.OrbitalValue,null)) AS Helical 
FROM gears a 
JOIN orbitinggears b on b.MainGearID=a.MainGearID 
GROUP BY a.MainGearID; 
+0

J'ai essayé avec votre approche. Maintenant, voir la structure de la table est bonne mais les données de sortie ne le sont pas. Avec cela je reçois seulement 1 rangée avec toutes les orbitales de type spur à l'intérieur de cette rangée, même avec ces orbiteurs qui ne sont pas en contact (dans ce cas non connecté via la clé logique MainGearID) :( – vzr

+0

@Endlessless, j'ai raté le ' PARTIE GROUP BY, qui a maintenant été ajoutée – vhu

+0

Merci, maintenant ça fonctionne comme un charme, je viens d'éditer cette requête: alias ajoutés et remplacé USING avec ON alors maintenant la requête dans votre réponse peut être facilement adaptée pour une utilisation générale si quelqu'un a exigence similaire avec des tables différentes. – vzr