2010-05-10 45 views
5

Si mi mesa se ve así:MySQL: Obtener valores únicos a través de múltiples columnas en orden alfabético

id | colA | colB | colC 
=========================== 
1 | red | blue | yellow 
2 | orange | red | red 
3 | orange | blue | cyan 

Qué consulta SELECT puedo ejecutar de tal manera que los resultados devueltos son:

azul, cian, naranja, rojo, amarillo

Básicamente, quiero extraer una lista colectiva de valores distintos en varias columnas y devolverlos en orden alfabético.

No me preocupa la optimización del rendimiento, ya que los resultados se analizan en un archivo XML que servirá como caché (la base de datos apenas se actualiza). Así que incluso una solución sucia estaría bien.

¡Gracias por cualquier ayuda!

Respuesta

3

Sólo hazlo de la forma habitual:

create table new_tbl(col varchar(50)); 


insert into new_tbl(col) 
select cola from tbl 
union 
select colb from tbl 
union 
select colc from tbl 

Luego ordenar:

select col from new_tbl order by col 

O si no desea que la tabla de etapas, simplemente:

select cola as col from tbl 
union 
select colb from tbl 
union 
select colc from tbl 
order by col 

Nota : UNION elimina automáticamente todos los duplicados, si desea incluir duplicados , Cambiar el UNIÓN a UNION ALL UNIÓN

+0

sólo elimina los duplicados compartidos entre las mesas unioned. Si cualquiera de las tablas incluye duplicados exclusivos de su propia sub selección, esos duplicados no se eliminarán, necesita SELECT DISTINCT o GROUP BY para hacerlo. –

+0

Tampoco estoy 100% seguro, pero creo que su columna ORDER BY solo se aplica a la última selección, no a todo el conjunto de resultados unidos. Debe usar paréntesis alrededor de las declaraciones seleccionadas para aclarar el propósito. –

+0

reko_t: por el contrario, cada uno de los seleccionados, el duplicado en cada uno de ellos también se eliminan en todos ellos –

8
(SELECT DISTINCT colA AS color FROM table) UNION 
(SELECT DISTINCT colB AS color FROM table) UNION 
(SELECT DISTINCT colC AS color FROM table) 
ORDER BY color 
+2

El uso de DISTINCT es opcional, UNION devuelve únicamente filas distintas. –

+0

Esa es la primera, ¡gracias! – RuCh

+0

@Salman A: verifique mi comentario en su publicación. –

Cuestiones relacionadas