SQLite:如何命名 "values"子选择中的列

标签 sqlite

在 postgres 中,我可以说:

test=# select * from (values(1),(3),(7)) as foo(id);
 id
----
  1
  3
  7
(3 rows)

这意味着这样的子选择随后可以使用 foo.id 等与其他表连接。

在sqlite中,我可以说:
sqlite> select * from (values(1),(3),(7)) as foo;

----------
1
3
7

但是如果我说 foo(id) 我会得到一个错误:
sqlite> select * from (values(1),(3),(7)) as foo (id);
Error: near "(": syntax error

显然,对于通常的子选择(例如 "(select ... as a, ... as b from... ) as foo"),您可以简单地命名每个字段。

我发现在这种情况下命名列的唯一简单解决方法是执行以下联合:
sqlite> select * from (select 1 as id where 1=0 union values(1),(3),(7)) foo;
id        
----------
1         
3         
7         

有没有更好的方法来命名 SQLite 中这种“子选择”中的列?

最佳答案

由 VALUES 创建的列具有您不想使用的名称(尽管可能):

sqlite> .mode columns
sqlite> .header on
sqlite> select * from (values(1,2,3));
            :1          :2        
----------  ----------  ----------
1           2           3         
sqlite> select "", ":1", ":2" from (values(1,2,3));
            :1          :2        
----------  ----------  ----------
1           2           3         

这是无法改变的;没有比在“真正的”SELECT 前面加上 UNION ALL 更好的方法了。

关于SQLite:如何命名 "values"子选择中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28416690/

相关文章:

c# - SQLite无法连接到另一台PC上的数据库

PHP 与 Zend Framework 无法启动 SQLite 数据库?

android - SQLite 查询未按特定顺序执行

python - Alembic 为几何列生成任意类型更改

Android:我需要关闭 Cursor 对象吗?

sql - 获取 SQL 查询中每个不同记录的最大平均值

android - 是否可以根据数组中元素的数量在运行时创建sqlite表

sql - SQLite:SQL在字段中找不到特定的值

android - 我应该如何在 Sqlite 中执行此查询?

android - sqlite错误中的多个表