2016-04-21 33 views
0

我試圖執行一個SQL語句,與做類似where子句:HSQL執行狀況喜歡的任何

WHERE col LIKE ANY (values...) 

按照HSQLDB documentation似乎,我認爲我應該能夠這樣做:

condition 
     { ... 
     | value [NOT] LIKE value [ESCAPE] value } 

value 
     [+ | -] { term [{ + | - | * |/| || } term] 
     | (condition) 
     | function ([parameter] [,...]) 
     | selectStatement giving one value 
     | {ANY|ALL} (selectStatement giving single column) 

但是,這似乎並不奏效。

我能執行此:

SELECT * FROM table WHERE col LIKE (selectStatement giving 1 column with single value) 

但是,任何這些都會給我一個錯誤:

SELECT * FROM table WHERE col LIKE (selectStatement giving 1 column with multiple values) 
-> cardinality violation 


SELECT * FROM table WHERE col LIKE ANY (selectStatement giving 1 column with single value) 
SELECT * FROM table WHERE col LIKE ANY (selectStatement giving 1 column with multiple values) 
-> unexpected token: SELECT 

你能幫我明白我做錯了嗎? 這不支持,還是我誤解了文檔?

謝謝!

+1

注意,在您鏈接引導頁面的評論「本指南是HSQLDB版本1.8.0。最新版本參見HSQLDB版本2.x指南「。 1.8.0指南中的規範寫得不好,不能依賴。 – fredt

+0

......我覺得自己像個白癡一樣沒有注意到這一點。謝謝!根據2.x指南,結果根本不可能。我想我堅持做一些自定義的SQL函數。不過謝謝你,我真的非常想知道爲什麼它不起作用! –

回答

0

取決於你想要達到的目標,你可以使用以下命令:

此查詢使用子查詢的LIKE比較返回的值。該值通常有一個轉義字符,例如super%,它匹配所有單詞與super開始:

SELECT * FROM table WHERE col LIKE (selectStatement giving 1 column with single value) 

此查詢使用子查詢作爲一個列表返回的值。每個列表值都與col值進行比較,當找到第一個完全匹配時,結果爲true。這種類型的查詢用於返回從表中有值是由子查詢返回的列表中的行的子集:

SELECT * FROM table WHERE col = ANY (selectStatement giving 1 column with multiple values) 
+0

謝謝,雖然對於這種情況,我真的需要使用ANY與%運算符,因爲我需要篩選所有以選定值開始的字符串,所以'='在這裏不會很不幸。 –