2013-03-08 3 views
1

J'ai une table MySQL, appelé related_post qui ressemble à ceci:Comment puis-je joindre deux requêtes sur la même table?

+----+--------+--------+ 
| id | post_1 | post_2 | 
+----+--------+--------+ 
| 1 |  25 |  26 | 
| 2 |  25 |  27 | 
| 3 |  25 |  28 | 
| 4 |  26 |  27 | 
| 5 |  26 |  28 | 
| 6 |  27 |  28 | 
| … |  … |  … | 
+----+--------+--------+ 

je dois récupérer tous les postes liés à un code postal donné.

Si je fournis '27', je veux qu'il retourne une seule colonne avec les valeurs "25", "26" et "28".

En ce moment, je dois le diviser en 2 requêtes:

SELECT post_1 FROM related_post where post_2 = 27; 
SELECT post_2 FROM related_post where post_1 = 27; 

Je voudrais savoir s'il est possible d'effectuer une seule requête pour obtenir le même résultat.

Répondre

3

vous pouvez utiliser une instruction CASE pour le faire dans une requête

SELECT CASE WHEN post_2 = 27 THEN post_1 ELSE post_2 END as post 
FROM related_post 
WHERE post_2 = 27 OR post_1 = 27; 
+0

c'est plus rapide que d'exécuter deux requêtes SELECT et de les "UNION", correct? – Redandwhite

+0

@Redandwhite oui, ce serait. –

3

Essayez UNION:

SELECT post_1 AS post FROM related_post where post_2 = 27 
UNION 
SELECT post_2 FROM related_post where post_1 = 27 

UNION également supprimer les doublons; si vous ne voulez pas utiliser alors UNION ALL

+0

Merci! Cela n'a pas fini par être la réponse acceptée (je cherchais une déclaration de cas), mais +1 pour être une réponse très viable. Merci – Redandwhite