我最近遇到了一个错误,在我的代码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
......在一个名为fox
列的brown
所有值。这可以很容易地像上述(尤其是当每一列都有非常不同的值)短查询注意到,但它想出了是一个相当复杂的查询与大多整数列如下:
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
突出显示逗号,以便我可以看到它。但是,我必须经常在其他环境中编写查询,其中包括一个专有接口,在这个接口中我无法轻松完成这样的事情。
感谢您的帮助!
我打算在我的问题中写下这个,实际上 - 但我想我会留下来看看人们是否有更好的建议。 任何方式允许它在'the'之前?或者那只是一个可以与之共存的东西? – 2009-11-19 16:56:51
某些东西在收集的一端或另一端会有所不同。如果你急于在选择之后立即使用逗号,那么你可以在选择之后移动“the”,或者选择一个虚拟常量,比如“select 1”。 – scwagner 2009-11-19 16:59:41
这一切都很好 - 我错过了一个逗号。我希望有一种总是有尾随逗号的方式,就像在Python或Ruby中一样。 (你可以写[1,2,3,4],然后这个问题就会消失,当你只想对第二个问题发表评论时,这是个好主意。) – 2009-11-19 17:03:25