Я не могу найти, как отключить полную квалификацию имен полей в 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