前提
最近select,我在代码中的一个语句中遇到了一个错误。当我意识到发生了什么之后,进行修复是相当琐碎的,但是我有兴趣找到一种方法来确保不再发生类似的错误。
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是关键字 不是 必需的。因此,您得到的结果是:
brown
as
the, quick, fox, jumped, over, the, lazy, dog
…的所有值都brown在名为的列中fox。对于像上面这样的简短查询,可以很容易地注意到这一点(特别是当每个列具有非常不同的值时),但是出现在一个相当复杂的查询中,其中主要是整数列:
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,但是我们需要的是比这更具选择性。
b11
b12
select * from table_name
问题
我正在寻找的是一种阻止这种情况再次发生的策略。
别名列时是否有要求as?还是写东西使其出错的技巧?(例如,在类似C的语言中,当我不小心遗漏了一个等号,使之成为而不是时,我开始编写1 == foo而不是foo == 1引起编译错误。)1 = foo``foo = 1
1 == foo
foo == 1
1 = foo``foo = 1
我vim通常使用,所以我可以用hlsearch突出显示逗号来吸引眼球。但是,我不得不经常在其他环境中编写查询,包括一个专有接口,在该接口中我无法轻松地做到这一点。
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;