2008-11-26 13 views
8

Dado un par de mesas sencillas de este modo:Los nombres de columna para una mesa formada por una UNION

create table R(foo text); 
create table S(bar text); 

si yo fuera a la unión entre sí en una consulta, ¿qué es lo que llamo la columna?

select T.???? 
from (
    select foo 
    from R 
    union 
    select bar 
    from S) as T; 

Ahora, en MySQL, puedo parecer referirse a la columna de T como 'foo' - el nombre de la columna correspondiente a la primera relación en la unión. En sqlite3, sin embargo, eso no parece funcionar. ¿Hay alguna manera de hacerlo que sea estándar en todas las implementaciones de SQL?

Si no, ¿qué tal solo para sqlite3?

Corrección: ¡sqlite3 le permite referirse a la columna de T como 'foo' después de todo! Oops!

Respuesta

11

Aunque no hay una regla deletreada, podemos usar los nombres de las columnas de la primera subconsulta en la consulta de unión para obtener los resultados de la unión.

12

Intenta dar un alias a las columnas;

select T.Col1 
from (
    select foo as Col1 
    from R 
    union 
    select bar as Col1 
    from S) as T; 

o Si el nombre de la columna no es necesario, entonces T. * será suficiente.

+0

su código de grupo Resultados de 'Col1', ¿por qué? – kicaj

5

sólo necesita alias de columna sólo en el primer selecto (probado en SQL Server 2008 R2)

select T.Col1 
from (
    select 'val1' as Col1 
    union 
    select 'val2' 
    union 
    select 'val3'  
) as T; 
Cuestiones relacionadas