Имена столбцов для таблицы, образованной UNION - PullRequest
9 голосов
/ 26 ноября 2008

Имеется пара простых таблиц, таких как:

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

Если бы я объединил их вместе в запросе, что я бы назвал столбцом?

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

Теперь в mysql я, очевидно, могу ссылаться на столбец T как 'foo' - имя соответствующего столбца для первого отношения в объединении. Однако в sqlite3 это не работает. Есть ли способ сделать это стандартным для всех реализаций SQL?

Если нет, то как насчет только для sqlite3?

Исправление: sqlite3 все-таки позволяет вам ссылаться на столбец T как 'foo'! Oops!

Ответы [ 3 ]

13 голосов
/ 26 ноября 2008

Хотя правила написания не существует, мы можем использовать имена столбцов из первого подзапроса в запросе объединения, чтобы получить результаты объединения.

13 голосов
/ 26 ноября 2008

Попробуйте дать псевдоним столбцам;

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

или Если имя столбца не обязательно, то T. * будет достаточно.

6 голосов
/ 31 августа 2012

вам нужны только псевдонимы столбцов только при первом выборе (протестировано в SQl Server 2008 R2)

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