2016-12-01 51 views
1

如果我这样做在SQLite3的:如何使用列别名选择值?

SELECT * 
FROM (VALUES (1), (2), (3)) AS "tbl.col" 
WHERE "tbl"."col" = 1 

我得到:没有这样的列:tbl.col

什么是正确的方法是什么?

谢谢!

回答

4

我认为你正在寻找这样的:

SELECT * 
FROM (VALUES (1), (2), (3)) AS tbl(col) 
WHERE tbl.col = 1; 

注意,当您(使用"tbl.col"),那么这是有它的周期一个名逃脱的标识符。不是两个名字。

编辑:

我本来期望上述的工作,但它在SQLite不。一种替代方案是使用CTE:

with tbl(col) as (
     VALUES (1), (2), (3) 
    ) 
SELECT * 
FROM tbl 
where tbl.col = 1 
+1

谢谢。我试过你写的东西,我回来了:附近“(”:语法错误: – Agendum

+0

另外,我正在使用DB Browser进行SQLite测试。是否有可能这是该工具的限制? – Agendum

+0

是的,我能够确认其他SQLite工具使用您提供的语法报告相同的错误。例如,这个在线SQLite工具:[link](http://wdbengine.sourceforge.net/)。 – Agendum

1

我发现这个question它回答我的问题。

SELECT "tbl"."" AS "col" 
FROM (VALUES (1), (2), (3)) AS "tbl" 

基本上,在VALUES第一列名是一个空字符串“”,二是“1”,三是“2”,等等......

希望这有助于其他人。