当前位置:  开发笔记 > 编程语言 > 正文

SQLite列别名

如何解决《SQLite列别名》经验,为你挑选了1个好方法。

前提

我最近select在我的代码中的一个语句中遇到了一个错误.在我意识到发生了什么之后修复它是相当微不足道的,但是我有兴趣找到一种方法来确保类似的错误不再发生.

以下是违规查询的示例:

select
  the,
  quick,
  brown
  fox,
  jumped,
  over,
  the,
  lazy,
  dog
from table_name;

我的意图是:

select
  the,
  quick,
  brown,
  fox,
  jumped,
  over,
  the,
  lazy,
  dog
from table_name;

对于那些没有看到它的人,brown在前者之后会丢失一个逗号.这将导致别名列,因为as是关键字不是必需的.那么,你得到的结果是:

  the,
  quick,
  fox,
  jumped,
  over,
  the,
  lazy,
  dog

...包含brown名为列的所有值fox.对于像上面这样的简短查询(特别是当每个列具有非常不同的值)时,可以很容易地注意到这一点,但是它出现在一个相当复杂的查询中,其中大部分是整数列,如下所示:

select
  foo,
  bar,
  baz,
  another_table.quux,
  a1,
  a2,
  a3,
  a4,
  a5,
  a6,
  a7,
  a8,
  a9,
  a10,
  a11,
  a12,
  a13,
  a14,
  a15,
  a16,
  b1,
  b2,
  b3,
  b7,
  b8,
  b9,
  b10,
  b11,
  b12,
  b13,
  b14,
  b18,
  b19,
  b20,
  b21,
  c1,
  c2,
  c3,
  c4,
  c5,
  c6,
  c7,
  c8
from table_name
join another_table on table_name.foo_id = another_table.id
where
  blah = 'blargh'
-- many other things here
;

即使有更好的列名,值也非常相似.如果我在b11(例如)之后错过了一个逗号然后b11调用了所有值b12,那么当我们通过处理管道运行数据时(这取决于结果中的这些列名),这是非常不幸的.通常情况下,我会这样做select * from table_name,但我们需要的是要求我们更有选择性.

我正在寻找的是一种阻止这种情况再次发生的策略.

有没有办法在别名列as时需要?或者写东西以使其产生错误的伎俩?(例如,在类C语言中,我开始编写1 == foo而不是foo == 1在我意外省略等号时导致编译错误,使其无效1 = foo而不是foo = 1.)

vim正常使用,所以我可以用它hlsearch来突出逗号,这样我就可以注意它了.但是,我必须经常在其他环境中编写查询,包括一个专有的界面,我不能轻易地做这样的事情.

谢谢你的帮助!



1> scwagner..:

我以前做过的一件事就是把逗号移到行的开头.这可以带来一些好处.首先,您可以立即查看是否有任何逗号丢失.其次,您可以在最后添加新列,而无需修改之前的最后一行.

失踪:

select
  the
, quick
, brown
  fox
, jumped
, over
, the
, lazy
, dog
from table_name;

不要错过:

select
  the
, quick
, brown
, fox
, jumped
, over
, the
, lazy
, dog
from table_name;

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有