前提
我最近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
来突出逗号,这样我就可以注意它了.但是,我必须经常在其他环境中编写查询,包括一个专有的界面,我不能轻易地做这样的事情.
谢谢你的帮助!
我以前做过的一件事就是把逗号移到行的开头.这可以带来一些好处.首先,您可以立即查看是否有任何逗号丢失.其次,您可以在最后添加新列,而无需修改之前的最后一行.
失踪:
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;