2012-12-12 4 views
0

PostgreSQL을 VB.NET/ODBC와 함께 사용하고 약간 복잡한 쿼리 문자열을 구성해야합니다.
이 단순화 된 버전 :복잡한 쿼리 문자열을 구성하는 PostgreSQL

SELECT dtbl_id, IDX, 이름, 신체의 체중 측정, 코드, 올해 MYTABLE FROM 이름 ILIKE '니모 %'<이 - AND (1 ~ 9999 dtbl_id)를 편집
OR 이름

에 의해 ORDER (15000 및 19999 BETWEEN dtbl_id) 나는 또한 시도 :

AND (1 ~ 9999 dtbl_id를)
나는 그러나 그들은 모두 15000 및 19999. 사이의 1과 9999 사이의 인덱스와 인덱스가있는 경우에만 "니모"로 시작하는 이름을 얻으려고 이름

BY ORDER (15000 및 19999 BETWEEN dtbl_id) 내가 원하는 결과를 얻지 못하는 경우 (있는 경우).

내 검색어에 어떤 문제가 있습니까?

답변

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입니다. 당신이 ILIKE 'nemo%' 필요 nemo와을 시작하는 이름 를 얻을 수 - (에드먼드에 의해 지적)

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

또 다른 실수 : 그래서, 첫 번째 WHERE 절을 같이 읽습니다.

+0

고맙습니다. 이제는 예상대로 작동합니다. –

+0

좋아요, 나는 '시작부터'또는 '내부'를 선택하여 실행할 수있는 프로그램을 가지고 있습니다. 그래서 이것은 실제 문제보다 오타입니다. –

1

가장 중요한 문제는 "nemo로 시작"이 조건 name ILIKE 'nemo%'을 사용하는 것이 가장 좋습니다. % 와일드 카드가 끝에 있음을 유의하십시오. 시작시 이름을 찾으려면 네 모로 끝나는!

두 번째 문제는 이고르가 지적한대로 OR 및연산자의 우선 순위입니다. 두 번째 두 절 주위에 대괄호를 넣으십시오.

+0

죄송합니다. 여기에 표시 할 예제를 단순화하는 동안됩니다. –