前提
我最近在我的代码中的select语句中遇到了一个错误.在我意识到发生了什么之后修复它是相当微不足道的,但是我有兴趣找到一种方法来确保类似的错误不再发生.
以下是违规查询的示例:
select the,quick,brown fox,jumped,over,the,lazy,dog from table_name;
我的意图是:
select the,brown,fox,dog from table_name;
对于那些看不到它的人来说,前者在褐色之后会丢失一个逗号.这会导致列具有别名,因为不需要as关键字.那么,你得到的结果是:
the,dog
…在名为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,那么当我们通过我们的处理管道(这取决于结果中的这些列名)运行数据时,这是非常不幸的.通常情况下,我会从table_name中选择*,但我们需要的是要比我们更具选择性.
题
我正在寻找的是一种阻止这种情况再次发生的策略.
有没有办法要求别名列?或者写东西以使其产生错误的伎俩? (例如,在类C语言中,我开始编写1 == foo而不是foo == 1,当我意外地遗漏了等号时导致编译错误,使其成为无效的1 = foo而不是foo = 1. )
我正常使用vim,所以我可以使用hlsearch来突出显示逗号,这样我就能看到它.但是,我必须经常在其他环境中编写查询,包括一个专有的界面,我不能轻易地做这样的事情.
谢谢你的帮助!