2011-06-06 21 views
1

J'ai fait la déclaration suivantemysql: fusionner deux colonnes en deux rangées

SELECT disease.id, disease.name, disease_synonym.name FROM disease JOIN disease_synonym where diseaseId=code 

le résultat est une table avec un identifiant et deux colonnes avec les noms. comment puis-je transformer cela en 2 colonnes avec seulement un identifiant et le nom? (Bien sûr, l'identifiant se produira maintenant plusieurs fois)

Bye,

Nico

+0

'SELECT maladie.id, maladie.nom FROM'? Quel nom voulez-vous disease.name ou disease_synonym.name? – Nemoden

+0

Les deux. Finalement, je veux quelque chose comme ceci: Tableau (id, nom): Valeurs: (1 | disease.name) (1 | disease_synonym.name) ... désolé si ce n'est pas très facile, les commentaires ne permettent pas les sauts de ligne – Nicolas

+0

Une requête d'union peut être: dans la première requête, vous sélectionnez les colonnes 1 et 2; Dans la deuxième requête, sélectionnez les colonnes 1 et 3, combinez leurs résultats en utilisant UNION. –

Répondre

4

Deux façons viennent à l'esprit ...


Exécutez la requête deux fois (une fois pour le nom, et une fois pour synonyme), puis l'union des résultats ensemble ...

SELECT disease.id, disease.name FROM disease 

UNION ALL 

SELECT disease.id, disease_synonym.name FROM disease JOIN disease_synonym where diseaseId=code 


Ou rejoignez sur une table à deux rangs, et utiliser une instruction CASE pour faire un pivot ...

SELECT 
    disease.id, 
    CASE WHEN pivot.field = 'name' THEN disease.name 
     WHEN pivot.field = 'syno' THEN disease_synonym.name 
    END 
FROM 
    disease 
INNER JOIN 
    disease_synonym 
    ON diseaseId=code 
CROSS JOIN 
    (SELECT 'name' AS field UNION ALL SELECT 'syno' AS field) AS Pivot 
+0

Le premier fonctionne. déjà essayé quelque chose dans cette direction, mais ceux-ci mieux. Merci beaucoup – Nicolas

0

Je pense que vous voulez SELECT disease.id, disease_synonym.name FROM ... ne vous? Juste afficher les noms des synonymes?