2012-12-12 58 views
0

我使用PostgreSQL與VB.NET/ODBC並且必須構造一個有點複雜的查詢字符串。
這是簡化版本:PostgreSQL構成複雜查詢字符串

SELECT dtbl_id,IDX,姓名,MEAS,代碼,一年MYTABLE WHERE名ILIKE '尼莫%' < - 編輯 AND(介於1和9999 dtbl_id)
OR (dtbl_id BETWEEN 15000到19999)ORDER BY名

我也嘗試:

AND(介於1和9999 dtbl_id)
AND(dtbl_id BETWEEN 15000到19999)ORDER BY名

如果我試圖讓名以 「海底總動員」,但只有當他們有1到9999之間和索引15000和19999之間 指數在這兩個我沒有得到想要的結果(如果有的話)。

我的查詢出了什麼問題?

回答

1

嘗試:

SELECT dtbl_id, idx, name, meas, code, year 
FROM mytable 
WHERE name ILIKE '%nemo' 
AND ((dtbl_id BETWEEN 1 AND 9999) 
    OR (dtbl_id BETWEEN 15000 AND 19999)) 
ORDER BY name 

詳細here

錯誤 - OR具有較低的優先級,然後AND。所以,你的第一個WHERE條款內容,如:

WHERE (name ILIKE '%nemo' AND dtbl_id BETWEEN 1 AND 9999) 
    OR (dtbl_id BETWEEN 15000 AND 19999) 

另一個錯誤(如埃德蒙指出的) - 讓名nemo開始你需要ILIKE 'nemo%'

+0

非常感謝伊戈爾。現在的工作和預期的一樣。 –

+0

好的,我選擇'從開始'或'裏面'有可行的程序,所以這是比真正的問題更多的錯字。 –

1

主要問題是使用條件name ILIKE 'nemo%'可以最好地獲得「以ne​​mo開頭」 - 請注意%通配符處於末尾。把它放在開始搜索名稱以nemo結尾!

正如Igor所指出的,第二個問題是ORAND運營商的優先級。如他所示,在括號後面加上括號。

+0

對不起,這變成簡化了這裏展示的一個例子。 –