我無法找到如何在通過視圖查詢時禁用SQLite中字段名稱的完全限定。 (請勿mtcars
笑,表的命名是從其他測試的症狀...)sqlite是在視圖中完全限定字段名稱
的設置:
sqlite> create table mtcars (id int, mpg real, cyl int, vs int);
sqlite> insert into mtcars values (1, 21.0, 6, 0);
sqlite> insert into mtcars values (2, 22.8, 4, 1);
sqlite> insert into mtcars values (1, 21.4, 6, 1);
sqlite> .headers on
「正常」 表的訪問,沒有訪問量:
sqlite> select * from mtcars foo;
id|mpg|cyl|vs
1|21.0|6|0
2|22.8|4|1
1|21.4|6|1
sqlite> select foo.* from mtcars foo;
id|mpg|cyl|vs
1|21.0|6|0
2|22.8|4|1
1|21.4|6|1
sqlite> select foo.mpg,foo.cyl from mtcars foo;
mpg|cyl
21.0|6
22.8|4
21.4|6
迄今爲止一切正常。創建和使用視圖:
sqlite> create view vwmtcars as select mpg,cyl from mtcars;
sqlite> select * from vwmtcars foo;
mpg|cyl
21.0|6
22.8|4
21.4|6
sqlite> select foo.* from vwmtcars foo;
mpg|cyl
21.0|6
22.8|4
21.4|6
仍然正常。但是:
sqlite> select foo.mpg,foo.cyl from vwmtcars foo;
foo.mpg|foo.cyl
21.0|6
22.8|4
21.4|6
我期待mpg|cyl
,不foo.mpg|foo.cyl
。
兩個問題:
- 爲什麼字段名是完全合格的?
- 我可以禁用它嗎?
(Win10 x64上,sqlite3的3.14.2(如包含在Git中換的Windows 2.11.1))
是的,這正是我想到的一種解決方法。我正在起草一個答案,因爲我發現了「爲什麼」的原因,如果不是一個更強大的解決方法。感謝回覆! – r2evans
似乎這種行爲是在通量:http://sqlite.1065341.n5.nabble.com/Aliasing-and-columns-names-td14489.html – gregory
從2008年的「不斷變化」,緩慢的話語:-)我看到一些其他類似的討論,看來我也看到了類似的行爲。也許我只是重申永遠是明確的「最佳實踐」。再次感謝! – r2evans