Je ne trouve pas comment désactiver la qualification complète des noms de champ dans SQLite lors de l'interrogation via une vue. (Ne riez pas mtcars
, dénomination de table est un symptôme d'autres tests ...)sqlite est des noms de champs entièrement qualifiants dans les vues
La configuration:
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
accès à la table "Normal", aucune vue:
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
Tout à fait normal jusqu'à présent. Créer et utiliser une vue:
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
Toujours normal. Cependant:
sqlite> select foo.mpg,foo.cyl from vwmtcars foo;
foo.mpg|foo.cyl
21.0|6
22.8|4
21.4|6
Je me attendais mpg|cyl
, pas foo.mpg|foo.cyl
.
Deux questions:
- Pourquoi les noms de champ étant complet qualifié? Est-ce que je peux le désactiver?
(Win10 x64, sqlite3 3.14.2 (comme inclus dans Git-for Windows 2.11.1))
Oui, c'est exactement une solution de contournement que j'avais en tête. Je suis en train de rédiger une réponse, car j'ai trouvé le «pourquoi», sinon une solution de contournement plus robuste. Merci d'avoir répondu! – r2evans
On dirait que ce comportement est en cours: http://sqlite.1065341.n5.nabble.com/Aliasing-and-columns-names-td14489.html – gregory
"En flux" à partir de 2008, discours lent :-) J'en ai vu d'autres discussions comme ça, et il semble que je vois un comportement similaire. Peut-être que je ne fais que réaffirmer une «meilleure pratique» d'être toujours explicite. Merci encore! – r2evans