2014-09-23 75 views
0

在SQLite數據庫中,我有一個包含整數類型col「a」的表「test」。SQLite:根據其他計算列的結果計算col

基於那個列,我想計算2個更多列,但第二列需要第一列的結果。

所以我試過如下:

SELECT a, a+1 AS b, b*2 AS c FROM test 

但SQLite中這是行不通的:

Error: no such column: b 

在其他DBMS中似乎工作,我想類似的東西在w3schools與以下查詢。

SELECT customerid as a, a+1 AS b, b*2 AS c FROM customers 

...那裏erevything是正常的。

有沒有辦法在沒有任何子選擇的情況下在SQLite中實現相同的功能?

+0

不可以。在你定義的同一個'select'中,你不能在表達式中使用列別名。 – 2014-09-23 12:33:37

+0

所以唯一可能的方法是Subselecting? – Michael 2014-09-23 12:37:24

+0

哪個是其他DBMS? (只是好奇) – CodeNewbie 2014-09-23 12:37:28

回答

1

檢查this link它談論MySQL中列別名的侷限性。從鏈接引用相關線路:

The WHERE clause determines which rows should be included in the GROUP BY clause, but it refers to the alias of a column value that is not known until after the rows have been selected, and grouped by the GROUP BY.

我想,推而廣之,使用別名來在同一查詢中選擇將失敗出於同樣的原因。

而是嘗試在所有表達式中使用列名稱。這樣你的代碼就可以在所有DBMS中工作。

SELECT a, a+1 AS b, (a+1)*2 AS c FROM test 
+0

你的URL指向MySql文檔, DBMS是SQLite。各種DBMS以不同的方式解決這個問題。以Firebird爲例,他可以通過以下方式使用組中的別名:http://www.firebirdsql.org/refdocs/langrefupd20-select.html – 2014-09-23 12:47:42

+0

除此之外,您選擇的文檔部分將討論其他問題:使用別名在WHERE子句中,而不在SELECT中(這是OP的需要)。 – 2014-09-23 12:51:53

+0

我意識到這一點。但是我找不到引用來討論OP問題的確切問題。這一個接近。請注意我的答案中的以下單詞:_我猜,通過擴展... _ – CodeNewbie 2014-09-23 12:54:01