2016-12-01 52 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」,等等......

希望這有助於其他人。