|
前提' r# P7 B! W7 o; ]; d: C8 A
最近select,我在代码中的一个句子中遇到了一个错误。当我意识到发生了什么时,修复是相当琐碎的,但我有兴趣找到一种方法来确保类似的错误不再发生。
; t% O( [4 l0 h0 e& i) R! a这是问题查询的例子:
. i) O0 ~9 x, N: y& tselect the, quick, brown fox, jumped, over, the, lazy, dogfrom table_name;我的初衷是:) N* g7 P6 t& g+ c% T
select the, quick, brown, fox, jumped, over, the, lazy, dogfrom table_name;对那些看不见的人,brown前者后面会缺少逗号。这将导致其他列表,因为as是关键字 不是 是必要的。因此,你得到的结果是:
2 W$ a2 h. R4 U d+ q0 r the, quick, fox, jumped, over, the, lazy, dog…的所有值都brown列名列中fox。对于上述简短的查询,很容易注意到这一点(特别是当每列都有非常不同的值时),但它出现在一个非常复杂的查询中,主要是整数列:
/ V0 R+ W4 z6 F$ Lselect 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, c8from table_namejoin another_table on table_name.foo_id = another_table.idwhere blah = 'blargh'-- many other things here;即使有更好的列名,这些值也非常相似。b11(例如)之后,我错过了一个逗号,然后是一切b11值都被调用b12.不幸的是,当我们处理管道运行数据时(这取决于结果中的列名)。通常,我会这样做select* from table_name,但我们需要的是比这更有选择性。3 o# g7 y) }# `, ]
问题
! x& @. h9 {! A+ o我正在寻找防止这种情况再次发生的策略。
' y& a& i4 l P/ N7 X- x/ r7 ]别名列时是否有要求as?还是写东西让它出错的技巧?(例如,类似C在语言中,当我不小心错过了一个等号,使它成为而不是时,我开始写1 ==foo而不是foo == 1导致编译错误。= foo``foo = 14 n3 h! d5 T" D9 j# S2 R0 }5 P
我vim通常用,所以我可以用hlsearch突出显示逗号以吸引注意力。然而,我必须经常在其他环境中编写查询,包括一个专有接口,我不能轻易地在接口中做到这一点。4 E6 d5 X" `! J' S C
谢谢你的帮助!
) q) h' w/ m- D( b% N
+ ?5 A# H: c& o* \6 g$ s 解决方案:
. t. Z( V x! ~ 我之前做过的一件事就是把逗号移到行头。这可以带来一些好处。首先,您可以立即检查是否缺少逗号。其次,您可以在末尾添加新列,而无需修改之前的最后一行。
8 M$ q( v0 p5 k# H% b丢失的:9 ?# G9 B$ \# B; o) B
select the,quick,brown fox,jumped,over,the,lazy,dogfrom table_name;不缺:, m3 M3 U+ n, p# j# V
select the,quick,brown,fox,jumped,over,the,lazy,dogfrom table_name; |
|