我最近遇到了一個錯誤,在我的代碼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