2011-04-19 61 views
2

當在SQLite中查詢數據庫時,我發現給我正在使用的表提供別名很有用。它還有助於解決命名衝突。沒有表名的SQLite列名

SELECT a._id, a.name, b.email FROM people AS a, emails AS b 

但是後來當我尋找列「_id」,「名」,並在我的光標「電子郵件」,我得到了列不能發現錯誤。它只適用於如果我將查詢更改爲:

SELECT a._id AS "_id", a.name AS "name", b.email AS "email" FROM people AS a, emails AS b 

有沒有辦法在沒有額外工作的情況下獲取基列名稱?

+0

嘗試轉儲從數據庫接收的對象。 – hsz 2011-04-19 12:55:30

+0

什麼類型的光標?既然你沒有顯示任何關於遊標的代碼,猜測答案有點棘手。 – 2011-04-19 12:55:32

+0

你的主題不應該是「沒有**表**名稱」嗎? (而不是*數據庫*名稱) – 2011-04-19 12:57:01

回答

0

從我讀過的看來,這似乎是一個SQLite特定的問題。

SQLite不(目前)作出有關
查詢中省略了AS子句列名的任何 承諾。如果您使用AS子句 ,那麼
列名稱保證爲AS右側的 標籤。如果
省略了AS子句,那麼列名稱 的名稱可能會從SQLite的一個發行版 更改爲下一個。

- http://old.nabble.com/Aliasing-and-columns-names-td18382558.html

我只會使用上有衝突列的表別名建議。例如,在上面的示例中,如果_id是唯一存在衝突的列:

SELECT a._id AS _id, name, email FROM people AS a, emails 
2

向列聲明別名是避免錯誤的更好方法。這兩個表格中的查詢可能具有相同的列名,並且很難區分它們而沒有別名。區分它們的唯一方法是將它們與表名關聯或給它們別名。

別名可以使查詢更易於寫入和讀取。您可以使用別名爲表或列指定另一個名稱。如果你有很長或者很複雜的表名或列名,這可能是一件好事情。

相關問題