12

给定几个简单的表格,如下所示:

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”!哎呀!

4

3 回答 3

15

尝试为列指定别名;

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

或者如果不需要列的名称,那么 T.* 就足够了。

于 2008-11-26T08:00:33.483 回答
13

虽然没有拼写规则,但我们可以使用联合查询中第一个子查询中的列名来获取联合结果。

于 2008-11-26T08:06:02.147 回答
8

您只需要在第一次选择中使用列别名(在 SQl Server 2008 R2 中测试)

select T.Col1
from (
    select 'val1' as Col1
    union
    select 'val2'
    union
    select 'val3'     
) as T;
于 2012-08-31T10:46:38.747 回答