0

私は VB.NET/ODBC で PostgreSQL を使用しており、少し複雑なクエリ文字列を作成する必要があります。
これは簡略化されたバージョンです:

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

私も試します:

AND (dtbl_id BETWEEN 1 AND 9999)
AND (Dtbl_id BETWEEN 15000 AND 19999) ORDER BY name

「nemo」で始まる名前を取得しようとしましたが、1 から 9999 までのインデックスと 15000 から 19999 までのインデックスがある場合のみです。どちらの場合も、必要な結果が得られません (存在する場合)。

クエリの何が問題になっていますか?

4

2 に答える 2

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

詳細はこちら

間違い-OR優先度はより低くなりANDます。したがって、最初のWHERE句は次のようになります。

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

もう1つの間違い(Edmundが指摘したように)-名前を最初から取得するにはnemo必要ILIKE 'nemo%'です。

于 2012-12-12T22:11:26.917 に答える
1

主な問題は、「nemoで開始」は、条件を使用して取得するのが最適であるということです。ワイルドカードが最後にあるname ILIKE 'nemo%'ことに注意してください。先頭に置くと、nemoで終わる%名前が検索されます!

2番目の問題は、Igorが指摘しているようにOR、演算子の優先順位です。AND彼が示すように、2番目の2つの句を角かっこで囲みます。

于 2012-12-12T22:14:42.980 に答える