2010-08-13 6 views
1

Je combine ces 3 tables dans une requête de rapport avec INNER JOIN (ceci est un exemple simplifié):MySQL sélectionner remplacer - utiliser des valeurs manuelles au lieu de la table de recherche rejoint

USERS 
ID NAME CODE1 CODE2 
1  James c1_2  c2_3 
2  Bob  c1_3  c2_1 

C1 
CODE1  VALUE 
c1_1  interested 
c1_2  maybe 
c1_3  not interested 

C2 
CODE1  VALUE 
c2_1  prepared 
c2_2  self-study 
c2_3  novice 

Le résultat de la requête ressemble à ceci :

NAME  INTEREST   PREPARED 
James maybe    novice 
Bob  not interested prepared 

Je voudrais vous débarrasser des tables de consultation et de créer ce résultat de la requête en utilisant uniquement la table des utilisateurs et probablement une déclaration intelligente REPLACE(). Peut-il être fait?

Merci!

Répondre

1

Bien sûr, mais je ne vois pas le point.

SELECT u.Name, c1.Value, c2.Value 
FROM dbo.Users u 
     INNER JOIN (
      SELECT 'c1_1' as Code1, 'interested' as Value 
      UNION ALL SELECT 'c1_2', 'maybe' 
      UNION ALL SELECT 'c1_3', 'not interested' 
     ) c1 ON c1.Code1 = u.Code1 
     INNER JOIN (
      SELECT 'c2_1' as Code1, 'prepared' as Value 
      UNION ALL SELECT 'c2_2', 'self-study' 
      UNION ALL SELECT 'c2_3', 'novice' 
     ) c2 ON c2.Code1 = u.Code2 

ps. Je sais que ce n'est pas (très probablement) ce que vous voulez dire, mais mon point de vue est qu'il sera toujours plus performant que n'importe quelle solution REPLACE et qu'il est plus flexible.

+0

C'est exactement ce dont j'avais besoin! Je pensais que remplacer était la seule option, mais c'est beaucoup plus agréable. J'avais besoin de cela parce que j'avais quelques dizaines de tableaux comme C1, C2 - et ils étaient seulement nécessaires pour une requête de sélection pour convertir les codes en valeurs lisibles par l'homme. Ces tables ne faisaient que rassembler la base de données, maintenant je n'en ai plus besoin. Merci beaucoup! –

Questions connexes