2008-11-26 9 views
8

Étant donné quelques tables simples comme ceci:noms de colonnes pour une table formée par une UNION

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

Si je devais l'union ensemble dans une requête, que dois-je appeler la colonne?

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

Maintenant, dans une base MySQL, je peux apparemment référence à la colonne de T comme « foo » - le nom de la colonne correspondante pour la première relation dans l'union. En sqlite3, cependant, cela ne semble pas fonctionner. Existe-t-il un moyen de le faire standard dans toutes les implémentations SQL?

Sinon, qu'en est-il de sqlite3?

Correction: sqlite3 vous permet de faire référence à la colonne de T comme 'foo' après tout! Oops!

Répondre

11

Bien qu'il n'existe aucune règle d'orthographe, nous pouvons utiliser les noms de colonne de la première sous-requête de la requête union pour extraire les résultats d'union.

12

Essayez de donner un alias aux colonnes;

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

ou si le nom de la colonne n'est pas nécessaire alors T. * sera suffisant.

+0

Vos résultats du groupe de code par 'Col1', pourquoi? – kicaj

5

vous avez seulement besoin d'alias de colonne uniquement dans la première sélection (testé dans Sql Server 2008 R2)

select T.Col1 
from (
    select 'val1' as Col1 
    union 
    select 'val2' 
    union 
    select 'val3'  
) as T; 
Questions connexes