给出了几个简单的表:
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'毕竟!糟糕!
答案 0 :(得分:13)
尝试为列提供别名;
select T.Col1
from (
select foo as Col1
from R
union
select bar as Col1
from S) as T;
或如果不需要列的名称,那么T. *就足够了。
答案 1 :(得分:13)
虽然没有拼写规则,但我们可以使用union查询中第一个子查询中的列名来获取联合结果。
答案 2 :(得分:6)
仅在第一次选择时需要列别名(在SQl Server 2008 R2中测试)
select T.Col1
from (
select 'val1' as Col1
union
select 'val2'
union
select 'val3'
) as T;